Ajax jQuery同时进行多次调用 – 漫长的等待回答而无法取消

我的问题如下:

  • 在一个页面上,我正在做多个(6)ajax调用(通过jQuery)同时获取一些数据(使用php包装器通过调用获取数据)
  • 请求是在同一时间完成的,需要10-20秒才能完成
  • 如果用户点击任何链接去其他地方(到其他页面),我可以看到所有未完成的调用都被取消
  • 但是,浏览器仍然等待20秒才能导航到另一个页面 – 就好像它仍在等待最长的呼叫完成,即使它被取消

(同样的问题在Chrome和Firefox中发生,ajax调用是异步的…我试图设置ajax超时,在ajax错误响应中捕获readystate = o,甚至尝试与webworkers做某事,但无济于事)

任何见解都会有所帮助

谢谢!

这是由于浏览器与单个域的maximum number of connections

请参阅浏览器以获取每个浏览器的mamimum。

  • IE 8 + 9:6连接
  • IE 10:8连接
  • Chrome 26:6连接
  • Firefox 21:6连接

您可以做的是收集所有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 

当用户尝试导航到另一个页面时,剩下的就是调用abortAllPendingRequests函数。

当你有某种router (例如Backbone.Router )时,你可以在那里调用它。

如果您的应用程序没有用于导航的router ,但您使用普通锚链接,则可以向调用abortAllPendingRequests函数的链接添加onClick。