我的问题如下:
(在Chrome和Firefox中也发生了同样的问题,ajax调用是异步的.我尝试设置ajax超时,在ajax错误响应中捕获readystate=o,甚至试图与webworkers做一些事情,但都没有结果)
任何洞察力都会有帮助
谢谢!
发布于 2013-12-04 19:07:32
这是由于浏览器的maximum number of connections到单个域。
请参阅棕镜以获取每个浏览器的哺乳期。
您可以做的是收集所有的Defferred对象,并在用户单击链接时取消它们。
示例:
// some ajax calls
doAjax({});
doAjax({});
var requests = [];
// helper function to perform and register calls
function doAjax(options) {
var jqXHR= $.ajax(options);
requests.push(jqXHR);
jqXHR.always(function(jqXHR) {
var index = requests.indexOf(jqXHR);
if (index!=-1) {
requests.splice(index, 1);
}
});
}
// function to abort all calls
// when your application has a router to provide navigation, this function
// is typically called when you navigate to another page
function abortAllPendingRequests() {
var i;
for (i=0; i<requests.length; i++) {
var xhr = requests[i];
// already finished calls (readyState 4) should not be aborted
if (xhr.readyState != 4) {
xhr.abort();
}
}
};当用户试图导航到另一个页面时,剩下的就是调用abortAllPendingRequests函数。
当您有某种router (例如,Backbone.Router)时,您可以在那里调用它。
如果应用程序没有用于导航的router,但使用普通锚链接,则可以在调用abortAllPendingRequests函数的链接中添加一个onClick。
https://stackoverflow.com/questions/20382636
复制相似问题