码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-02-16 19:47:24      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:javascript   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” 博客,转载请与作者联系!

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

标签:javascript   ajax   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!