Javascript 有没有办法停止浏览器中的HTTP AJAX调用,以便另一个调用可以继续?
我正在开发一个大量使用AJAX功能的应用程序。我目前正在处理一个页面,其中有大量ajax调用用于呈现初始页面。所有这些调用都通过相同的AJAX脚本进行路由,因此浏览器必须一次调用一个。(是的,效率有点低) 我有一个加载另一个页面的事件,但不幸的是,它需要进行ajax调用才能重新呈现页面。这样做的结果是,如果用户在第一次加载页面时单击该链接,浏览器将等待所有其他ajax调用,然后根据用户单击引发的事件调用重新呈现页面。这导致在加载页面时单击指向页面的链接时,页面的加载时间明显变慢Javascript 有没有办法停止浏览器中的HTTP AJAX调用,以便另一个调用可以继续?,javascript,ajax,http,Javascript,Ajax,Http,我正在开发一个大量使用AJAX功能的应用程序。我目前正在处理一个页面,其中有大量ajax调用用于呈现初始页面。所有这些调用都通过相同的AJAX脚本进行路由,因此浏览器必须一次调用一个。(是的,效率有点低) 我有一个加载另一个页面的事件,但不幸的是,它需要进行ajax调用才能重新呈现页面。这样做的结果是,如果用户在第一次加载页面时单击该链接,浏览器将等待所有其他ajax调用,然后根据用户单击引发的事件调用重新呈现页面。这导致在加载页面时单击指向页面的链接时,页面的加载时间明显变慢 我的问题是:是否
我的问题是:是否有一种方法可以使用Javascript或其他东西让web浏览器取消对web脚本的http调用,这样另一个事件就可以调用同一个脚本?我知道最好每次调用不同的脚本,这样它们就可以同时发生,但不幸的是,我正在开发的应用程序通过一个中心脚本将所有ajax请求导入,这在短期内不会改变。您可以使用jQuery$.ajax方法 此时您将为每个调用指定一个超时,然后将异步设置设置设置为false。这样,一次只能运行一个ajax请求 文档可在此处找到: 使用XMLHttpRequest对象上的来取消任何正在进行的请求,并将对象返回到可重用状态 可以将其包装在辅助对象中,例如:
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);
(未测试,可能有效)