在慢速网络上,上一个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();
然后,每个回调函数都将是一个闭包,引用发送的特定请求。
相关文章:
- 滚动到容器中的下一个元素-几乎到了
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 使用ajax将数据从一个步骤发送到下一个步骤的3步表单
- AngularJS&JSON-从Previous&下一个对象
- 使用向下箭头键(与tab键一样)聚焦下一个输入
- 来自文档或下一个静态父级的事件委派
- angularjs移除焦点上的活动类并添加到下一个项目
- 禁用旋转木马中的下一个按钮和上一个按钮
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- 新的会话cookie直到下一个服务器请求才提供
- 在慢速网络上,上一个Ajax请求会被下一个取消
- 循环遍历 Angular HTTP 请求中的对象,等到响应后再运行下一个循环
- 使用 ajax 请求获取上一个和下一个对象
- Jquery Queue请求集成一次First Request Success,然后调用下一个请求
- 如果请求已被处理,则阻止执行下一个路由器
- 当使用带有单个套接字的httpAgent时,它会在发送下一个请求之前等待响应吗?
- 如何在发出下一个请求之前等待响应
- 使用jQuery执行发布请求并显示下一个页面
- 处理ajax请求的流控制(即只在前一个请求完成后处理下一个请求)