加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

连续多次发送Ajax前面的请求被后面的覆盖以致不能执行的问题

发布时间:2020-12-16 02:06:20 所属栏目:百科 来源:网络整理
导读:感谢 http://www.jb51.net/article/27610.htm 的文章《ajax同步请求和异步请求的差异分析》。不过在遇到并解决这个问题之前我也还没有分清同步异步的差异咳咳~ functionfetchdata(cat,str){varxmlHttp;//问题就在这里xmlHttp=GetXmlHttpObject();varurl;if(x

感谢 http://www.aspzz.cn/article/27610.htm 的文章《ajax同步请求和异步请求的差异分析》。不过在遇到并解决这个问题之前我也还没有分清同步异步的差异咳咳~

functionfetchdata(cat,str)
{varxmlHttp;//问题就在这里

xmlHttp=GetXmlHttpObject();
varurl;
if(xmlHttp==null)
{
alert("browserdoesn'tsupportHTTPRequest");
return;
}
switch(cat)
{
case"n":url="getcompany.php?sid="+Math.random();break;
case"c":
case"p":url="getaddress.php?province="+str+"&sid="+Math.random();break;
case"m":varobj=document.getElementById("deptselect");
if(obj.value!=null&&obj.value!="undefined"&&obj.value!="")
{
alert(obj.value)
setCookie('deptname',obj.options[obj.selectedIndex].text,365);
setCookie('deptid',str,365);
}
case"d":url="deptvsmem.php?deptid="+str+"&sid="+Math.random();break;
}
alert(url)
xmlHttp.onreadystatechange=function(){//异步调用是否成功
if(xmlHttp.readyState==4||xmlHttp.readyState=="complete")
{
if(xmlHttp.status==200||xmlHttp.status==0)
{
varsel;varvnum;
varstr=xmlHttp.responseText;
alert(str)
switch(str.charAt(0))
{
case"p":sel="provinceselect";vnum=1;break;
case"c":sel="cityselect";vnum=1;break;
case"n":sel="comselect";vnum=1;break;
case"d":sel="deptselect";vnum=2;break;
case"m":sel="memselect";vnum=2;break;
}
str=str.substr(1);
BuildSel(str,document.getElementById(sel),vnum);
}
}
}

xmlHttp.open("GET",url);
xmlHttp.send(null);
}

问题就在于第二行的声明var xmlHTTP,如果放在函数外用作全局变量,就会产生标题的问题,即前面的xhr被后面的请求覆盖以致只能执行最后一条请求。只要把它拿进去就没问题了。。。就!没!问!题!了!!。。。之前看有前辈说是因为在收到xmlHttp.responseText之后没有及时删除,要加delete 而且要设成null,不过亲测即使删除了设成null了还是会覆盖,这样把声明放进函数内之后即使没有删除也没问题了。。。@_@

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读