我已经调试了一个星期的ajax问题,但无法弄清楚如何修复它。我正在使用jquery进行ajax调用,如下所示:
.... in head tag....
$.ajaxSetup({
cache: false
});
....on button click in the code...
jqxhr = $.ajax({
url: 'searching.html',
data: 'showDetails=' + showProgressDetails,
dataType:'text',
success: handleRefreshComplete,
error:handleSearchError,
complete:handleCompleteEvent
})
.done(function() { alert("done"); })
.fail(function() { alert("error"); })
.always(function() { alert("always"); });
ajax调用大约需要5分钟才能完成。当我在Chrome中运行此代码时,它可以正常工作,但所有其他浏览器只是坐在那里,永远不会完成。不会抛出任何错误,也不会调用任何事件处理程序(例如错误,成功)。
我使用WireShark来查看网络跟踪,我发现当在Chrome中进行ajax调用时,会发送TCP保持活动请求,如下所示:
...[TCP Keep-Alive] 64428 > http [ACK] Seq=3599 Ack=135557 Win=40018 Len=1
...[TCP Keep-Alive ACK] http > 64428 [ACK] Seq=135557 Ack=3600 Win=248 Len=0 SLE=3599 SRE=3600
对于所有其他浏览器,没有这些浏览器被发送和接收。我尝试过设置超时,但它们似乎对代码没有任何影响。
问题实际上比我最初想的更复杂。当我们的网络上有多个ajax请求时,似乎会出现问题。发生这种情况时,Chrome效果很好,但其他浏览器只能无限期地等待。在服务器端,所有呼叫都返回到客户端
对于如何修复或进一步调试此问题的任何想法或建议将不胜感激。
谢谢,
Joe C
答案 0 :(得分:1)
尝试在通话中添加timeout
:
我在这里添加了timeout
5分钟(5 * 60 * 1000)
$.ajaxSetup({
cache: false,
timeout: 3000000
});
您可能希望根据实际拍摄时间将其提高一个档次。