在慢速网络上,先前的 Ajax 请求被后续请求取消

On slow network previous Ajax request gets cancelled by the subsequent

我有以下问题:
我正在尝试发送两个 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();

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