我有以下问题:
我试图几乎模拟地发送两个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请求的这种自动取消?
答案 0 :(得分:2)
您应该使用局部变量来保存XMLHttpRequest
。由于您正在使用全局变量,因此回调函数始终引用已发送的第二个AJAX请求。所以改变:
xhr = new XMLHttpRequest();
为:
var xhr = new XMLHttpRequest();
然后每个回调函数将是一个闭包,引用已发送的特定请求。