6

一部のデータの ajax 呼び出しがあります (jQuery を使用)。ユーザーが「送信」をクリックした後(およびajax呼び出しが送信された後)、リクエストが返されるまですべてを無効にする「お待ちください...」メッセージを表示しています(ユーザーがダブルクリックしたり、他のものをクリックしたりして混乱することはありません物事)。

何らかのエラーが発生した場合にうまく機能します。「お待ちください...」が消え、何が問題なのかをユーザーに表示しています。

しかし、通信エラーのためにサーバーから何も返されない場合はどうなりますか?

私が見つけた解決策は、「お待ちください..」メッセージに10秒のタイムアウトを設定することです。その後、メッセージは消えて表示され、「通信に失敗しました」というエラーが表示されます。サーバーが 10 秒後に応答しなかった場合、サーバーはまったく応答しないと思いますが、それは誤った仮定です。

問題は、サーバーが 20 秒後に何かを返さないことをどのように確認できるかということです。発生する可能性のあるシナリオは、ユーザーが送信をクリックすることです --> 10 秒後にエラー メッセージが表示されます --> 5 秒後にサーバーの応答が表示され、ユーザーが混乱します

「お待ちください..」メッセージを非表示にした後、サーバーから何も表示されないようにするにはどうすればよいですか?

4

3 に答える 3

4

このようなものを処理できます

if ( request.readyState == 4 ){  // 4 is "complete" 
  if ( request.status == 200 ){
    // HTTP OK, carry out your normal Ajax processing
    // ... 
  }else{
    // something went wrong, report the error
    error( "HTTP "+request.status+".  An error was »
             encountered: "+ request.statusText );
  }
}

(また)

$.ajax({
    type: "post", 
    url: "somepage.html",
    success: function (data, text) {
        //...
    },
    error: function (request, status, error) {
        alert(request.responseText);
    }
});
于 2012-05-01T08:00:15.500 に答える
3

サーバーにリクエストを送信するとき。接続が開かれ、サーバーが応答しない限り開いたままになります。
1.サーバー側の何らかのエラーが原因で応答できない場合、通常は 5xx の応答コードが返されます (503)


1.サーバーがリクエストまたは接続の終了を送信するのを待ちたい場合(どちらか早い方)、 のcompletedオプションを使用できますjquery ajax
2. 20 秒経ってもサーバーが応答しない状態にあり、応答するはずだったと思われる場合は、タイムアウトを使用します。
3.最後に、エラーが発生してもリクエストを終了しないカスタマイズされた(手作りのhttpサーバー)を使用していることが問題である場合は、少なくとも応答コードを送り返すように十分にカスタマイズしてください(このためはリクエストとレスポンスの HTTP モデルです)

于 2012-05-01T09:39:46.873 に答える
1
  • リクエストを発行するときに一意のトークンを生成し、
  • 有効なトークンのリストを保持し、
  • リクエストがタイムアウト/失敗したときにトークンを削除します。
  • 成功/エラー コールバックを実行する前に、トークンがまだ有効かどうかを確認します。

同じパターンは、頻繁に繰り返し要求を送信する必要があり (オートコンプリート/結果のフィルタリングなど)、最新のハンドラーのみを起動する必要がある場合にも適用できます。

于 2012-05-01T09:31:04.823 に答える