有没有办法在浏览器中停止HTTP AJAX调用,以便另一个调用可以继续
Is there a way to halt an HTTP AJAX call in the browser so that another one can proceed?
我正在开发一个大量使用 AJAX 功能的应用程序。我目前正在处理一个页面,其中有大量的 ajax 调用来呈现初始页面。所有这些调用都通过同一个 AJAX 脚本进行路由,因此浏览器必须一次进行一次调用。(是的,效率有点低)
我有一个加载另一个页面的事件,但不幸的是,它需要先进行 ajax 调用才能重新呈现页面。这样做的结果是,如果用户在页面首次加载时单击该链接,浏览器将等待所有其他 ajax 调用,然后再根据用户单击引发的事件进行调用以重新呈现页面。这导致页面加载时单击指向它的链接时页面的加载时间明显变慢。
我的问题是:有没有办法使用 Javascript 或其他东西让 Web 浏览器取消对 Web 脚本的 http 调用,以便另一个事件可以调用同一脚本?我知道每次调用不同的脚本会很好,这样它们就可以同时发生,但不幸的是,我正在处理的应用程序通过中央脚本将所有 ajax 请求漏斗,而且这不会很快改变。
对 XMLHttpRequest 对象使用 abort()
方法取消任何正在进行的请求并将对象返回到可重用状态。
您可以将其包装在帮助器对象中,例如:
function HttpQueue(uri) {
var queue= [];
var xhr= new XMLHttpRequest();
xhr.onreadystatechange= function() {
if (xhr.readyState===4 && queue.length>=1) {
queue.unshift()[1](xhr);
if (queue.length>=1)
next();
}
};
this.send= function (data, callback, isurgent) {
if (isurgent && queue.length>=1) {
queue.length= 0;
xhr.abort();
}
queue.push([data, callback]);
if (queue.length==1)
next();
};
function next() {
xhr.open('POST', uri, true);
xhr.send(queue[0][0]);
}
}
var queue= new HttpQueue('/script');
queue.send('action=foo', function() {
alert('task 1 done');
}, false);
queue.send('action=bar', function() {
alert('task 2 done');
}, false);
queue.send('action=bof', function() {
alert('task 3 is urgent! tasks 1 and 2 can get knotted');
}, true);
(未经测试,可能有效)
您可以使用 jQuery $.ajax 方法。
此时,您将为每个调用指定超时,然后将 aSync 设置设置为 false。这样,您一次只能运行一个 ajax 请求。
文档可在此处找到:http://api.jquery.com/jQuery.ajax/
相关文章:
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 多次调用另一个javascript函数中的javascript函数
- 如何记录调用另一个函数的函数的返回值
- AngularJS服务函数调用另一个函数
- Meteor-如何在同一模板助手中调用另一个函数
- Javascript:从一个帧中调用另一个帧中的函数
- 调用另一个自定义指令的角度自定义指令
- 如何在 jQuery 中使用 eval 从不同的文件调用另一个函数
- 如何在 JavaScript 的后台调用另一个页面
- 如果我在 window.onbeforeunload 事件上确认是,我如何调用另一个 Java 脚本函数
- ajax没有;t成功后调用另一个js函数
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- 调用另一个HTML文件中的函数
- angularjs调用另一个控制器's函数
- 调用另一个php脚本生成图表时出现问题
- MongoDB:如何调用另一个JS文件中定义的函数
- 从一个元素中获取名称并调用另一个元素
- 在函数中调用另一个函数JQuery
- 调用另一个控制器Angularjs中的控制器
- 在方法内部调用另一个方法 ReactJS