2011-08-15 6 views
1

私は1週間、ajaxの問題をデバッグしていましたが、それを修正する方法がわかりません。私はjqueryを使って次のようにajax呼び出しを行っています:特定のブラウザで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のを使用していると私はAjaxの呼び出しがChromeで行われた場合、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はうまく動作しますが、他のブラウザは無期限に待っています。サーバー側では、すべての呼び出しがクライアントに返されます。

この問題を修正またはさらにデバッグする方法についてのご意見やご提案は大変ありがとうございます。

おかげで、

ジョー・C

答えて

1

あなたのコールにtimeoutを追加してみてください:ここで

私はtimeout 5の分(* 1000年5 * 60)

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

を追加しましたあなたはそれが実際の時間に応じてより高いノッチをバンプしたいかもしれません。

+0

私はajaxSetupとajaxの両方の呼び出しでタイムアウトを試みましたが、助けになりません。また、あまりにも多くの同時のAjaxリクエストを作成していないことを確認します。これが唯一のリクエストです。 –

+0

問題は、私が思ったよりも実際にはもっと複雑です。私たちのネットワーク上に複数のajaxリクエストがあるときに問題が発生するようです。これが起こると、Chromeはうまく動作しますが、他のブラウザは無期限に待っています。サーバー側では、すべての呼び出しがクライアントに返されます。 –

関連する問題