Ajax请求永远不会返回某些浏览器

时间:2011-08-15 17:04:09

标签: jquery ajax

我已经调试了一个星期的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

1 个答案:

答案 0 :(得分:1)

尝试在通话中添加timeout

我在这里添加了timeout 5分钟(5 * 60 * 1000)

$.ajaxSetup({
   cache: false,
   timeout: 3000000
});

您可能希望根据实际拍摄时间将其提高一个档次。