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。