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

On slow network previous Ajax request gets cancelled by the subsequent

本文关键字:请求 下一个 取消 Ajax 上一个 网络      更新时间:2023-09-26

我有以下问题:
我试图几乎模拟地发送两个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();

至:

var xhr = new XMLHttpRequest();

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