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

时间: 2024-12-15 01:53:30

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

原生js和jquery发送ajax请求及封装

原生js                                   // ajax get 五部曲function ajax_get(url,data){ // 异步对象 var ajax=new XMLHttpRequest(); // 设置url和请求方式 // url方法 如果有数据要把数据拼接到url中?name=jack&age=20 if(data){ url+=?; url+=data; }else{}; ajax.open('get',url); // 发送请求 aja

通过在jquery中添加函数发送ajax请求来加载数据库数据,以json的格式发送到页面

通过在jquery中添加函数发送ajax请求来加载数据库数据,以json的格式发送到页面 从数据库中查询仓库信息,显示在下拉菜单中: 首先,引入js插件,这里使用jquery-1.8.3.js <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script> 当页面加载完成后,就应该发送ajax请求到数据库,

防止重复发送Ajax请求的解决方案

防止重复发送Ajax请求的解决方案 这篇文章主要介绍了防止重复发送Ajax请求的解决方案,感兴趣的小伙伴们可以参考一下 在页面中有多个按钮,点击该按钮可以异步的去服务端读取数据,然后在前端将数据展示出来. 每个按钮点击请求的页面都是同一个,但是请求的参数不同,所以返回的内容就不同. 在连续点击多个按钮的时候就会发出多个异步请求.那么根据请求返回的快慢(因为不同按钮参数不同,返回内容不同,所以会有快慢之分),数据会依次的展示出来,那么就会出现一个先点击的按钮,由于他请求的数据量比较大,导致数据被后

使用原生JavaScript发送ajax请求

关于使用原生JavaScript发送异步请求给服务端. 准备工作: 代码编写工具用的是sublime 服务端使用的是wamp搭的一个本地Apache服务器,主要用来返回数据 方便测试 步骤: 浏览器端 html标签绑定事件发送ajax请求----> 五步操作:1 创建异步对象XMLHttpRequest; 2 设置method url 3 发送请求给服务端 4 注册事件   5 在事件中获取服务端返回的数据,进行操作. 服务器端 1 获取请求数据 2 返回结果给浏览器 下面来一个小demo1做一

IE9下JQuery发送ajax请求失效

最近在做项目的时候,测试PC端网页,在IE9下会失效,不能正常的发送POST请求,经过仔细的排查,发现是IE9下JQuery发送ajax存在跨域问题. 目前有两种解决方案:   解决方案一: 设置浏览器安全属性,启用[通过域访问数据源]选项,如下图所示:    解决方案二:  调用ajax方法时,设置crossDomain为true,如下图所示: <!DOCTYPE html> <html> <head> <title>jQuery CORS in IE7

JQuery发送ajax请求不能用数组作为参数

JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){        var selectedMembers = document.getElementsByName('selectedMembers');        var cwIds = new Array(); //定义数组        for(var i=0;i<selectedMembers.length;i++){  

jQuery发送ajax请求三种方式

<button>点击发送ajax get请求</button> <button>点击发送ajax post请求</button> <button>点击发送通用的ajax请求</button> <script type="text/javascript" src="jquery-1.8.3.min.js"></script> <script type="te

怎样防止重复发送 Ajax 请求?

一个简易的需求,点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.粗暴的解决方式是点一次就将按钮disable掉.请问一下有没有更好的办法,比如多点一次后自动down掉前一次请求?补充:不是一次请求,更类似于gmail的全站AJAX,刚用firebug看了一下gmail,发现重复请求时,之前的请求状态变为“Aborted”,并且不反回任何数据.请问是如何做到的呢?毕竟一般理解客户端AJAX发送后是不能终止的. A. 独占型提交只允许同时存在一次提交操作,并且直到本次提交

响应json数据之发送ajax的请求

一.前端异步请求代码: <span style="font-size:14px;">$.ajax ({ type: "POST", //请求的方式 url: "outputservlet3", //请求url data: {}, //前端向后端传送的数据 dataType: "json", //数据格式json error: function () //请求错误的回调函数 { }, success: functio