Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在较慢的网络上,上一个Ajax请求会被下一个Ajax请求取消_Javascript_Ajax_Xmlhttprequest - Fatal编程技术网

Javascript 在较慢的网络上,上一个Ajax请求会被下一个Ajax请求取消

Javascript 在较慢的网络上,上一个Ajax请求会被下一个Ajax请求取消,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我有以下问题: 我试图模拟发送两个Ajax请求: function ajax() { xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if(xhr.readyState == 4) console.log(xhr.responseText); } xhr.open('GET', 'list.html', true); xhr.send(''); }

我有以下问题:
我试图模拟发送两个Ajax请求:

function ajax()
{
   xhr = new XMLHttpRequest();
   xhr.onreadystatechange = function()
   {
      if(xhr.readyState == 4)
         console.log(xhr.responseText);
   }
   xhr.open('GET', 'list.html', true);
   xhr.send('');
}
ajax();
ajax();
问题是,他们中只有一个成功了
如果我自己尝试使用DevTools,如果网络速度很高,它们都会被执行(当我在控制台中快速键入两次ajax()函数时),而如果我降低网络速度并再次快速键入它们,则只有一个成功。

为什么会这样?如何避免自动取消同步xhr请求?

您应该使用一个局部变量来保存
XMLHttpRequest
。因为您使用的是全局变量,所以回调函数总是引用发送的第二个AJAX请求。因此,改变:

xhr = new XMLHttpRequest();
致:


然后,每个回调函数都将是一个闭包,引用发送的特定请求。

是的,我输入错误,现在它可以工作了。但我只是简化了这个问题,我真正的问题是,我有一个对象,其中有一个方法,我在其中发出一个xhr请求,我使用var xhr,但我只执行了一个。可能有什么问题?URL参数是否相同?尝试添加缓存清除器,以防止缓存被使用。
var xhr = new XMLHttpRequest();