在慢速网络上,先前的 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();
然后每个回调函数将是一个闭包,它引用已发送的特定请求。
我有以下问题:
我正在尝试发送两个 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();
然后每个回调函数将是一个闭包,它引用已发送的特定请求。