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

前端之家收集整理的这篇文章主要介绍了连续多次发送Ajax前面的请求被后面的覆盖以致不能执行的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

感谢 http://www.jb51.net/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了还是会覆盖,这样把声明放进函数内之后即使没有删除也没问题了。。。@_@

原文链接:https://www.f2er.com/ajax/163731.html

猜你在找的Ajax相关文章