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

时间:2015-02-06 23:47:39

标签: 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();
ajax();

问题是只有其中一个成功。
 如果我自己尝试使用DevTools,如果网络速度很高,它们都会被执行(当我在控制台中快速键入两次ajax()函数时),如果我降低网络速度并再次快速键入它们他们成功了。
为什么会这样?如何避免同时xhr请求的这种自动取消?

1 个答案:

答案 0 :(得分:2)

您应该使用局部变量来保存XMLHttpRequest。由于您正在使用全局变量,因此回调函数始终引用已发送的第二个AJAX请求。所以改变:

xhr = new XMLHttpRequest();

为:

var xhr = new XMLHttpRequest();

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