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

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

{var xmlHttp;//问题就在这里

xmlHttp=GetXmlHttpObject();

var url;

if(xmlHttp==null)

{

alert("browser doesn‘t support HTTP Request");

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": var obj = 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)

{

var sel;var vnum;

var str = 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了还是会覆盖,这样把声明放进函数内之后即使没有删除也没问题了。。。@_@

本文出自 “Chronosphere” 博客,转载请与作者联系!

原文:http://chronosphere.blog.51cto.com/9598252/1614668

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值