2012-09-11 11 views
5

ユーザーがレポートをリクエストしたときにアプリケーションでjQuery AJAX(​​を使用)を呼び出すと、多数のクランチ処理とmySQLリクエストを行うファイルが呼び出されます。負荷には通常5〜6秒かかり、負荷中に負荷GIFを表示するには.ajaxStart().ajaxStop()が使用されます。キャンセルAJAXリクエストにより後続のナビゲーションが遅くなる

問題:

ユーザーが「レポートの生成」ボタンをクリックして、彼らの心を変更し、別のページにアプリケーションがハングをナビゲートしようとし、5-6のための新しいページに移動しない場合秒。新しいページに移動しようとするとすぐに.ajaxStop()が起動するローディングgifの削除から、ブラウザが次のページをロードする前にajaxリクエストが完了しているように見えます。

これは正常な動作ですか?これを修正/再構成する方法に関する提案はありますか?

+0

私はちょうど私がコメントし、あなたに言うと思った、あなたは一人ではありません!私はこの正確な問題を抱えています。 ChromeのインスペクタとFirebugでは、ブラウザがAJAXを使用して保留中のネットワークリクエストをキャンセルし、次のページの「新しい」リクエストのみが「保留中」となっています。しかし、それは実際に遠くに移動することを選択する前に、まだ良い5-10秒間ハングするようだ。 –

+0

同じです:ブラウザは、既存のAjaxリクエストが完了するまで常に遅れます。応答はもはや必要ではないが。 – CoreyOConnor

+0

クロスドメインリクエストを介してOpenID資格情報を追加するライブラリを使用していますか? – CoreyOConnor

答えて

0

私は、.ajaxStop()は、beforeSendコールバックがfalseを返す場合にのみ、ajaxリクエストをキャンセルすると信じています。この場合、コールは開始されておらず、サーバーは要求を受信して​​いません。要求がサーバーに送信されると、ページは戻ってくるまで要求に対する制御権を持ちません。 .ajaxStop()要求は、最後のajax呼び出しが成功した場合に呼び出され、実行を終了するため、ページからナビゲートすると起動します。

beforeAndコールバック関数内でfalseを返すことによって最後の未解決のAjax要求が取り消されると、ajaxStopイベントもトリガーされます。

上記は、.ajaxStop()コマンドのjquery apiウェブサイトからの抜粋です。ユーザーが別のページに移動中であっても、呼び出しが行われ、要求が送信されるとサーバーは呼び出しを完了しているように見えます。その大きなコールの場合、発生している遅延が発生する可能性があります。

これが役に立ちます。

+2

私は、AJAXリクエストが別のページにナビゲートしようとしていても、ブラウザがAJAXリクエストを返すのを待っているように見えることを心配しています。はい、サーバーを停止することはできません。ブラウザは_caring_を停止しているはずです。リクエストが返ってくるのを待つべきではありません。 –

関連する問題