特定のページの読み込み時に、サーバーに ajax リクエストを送信して JSON データを取得するブラウザ アプリがあります。返されると、ajax リクエストが処理され、すべて問題ありません。
私が呼び出しているサーバーには現在、いくつかの厄介な断続的な問題があります。特に、ajax 呼び出しからの応答が JSON ではなく何も返さないことがランダムに発生しています。この特定のページの有用性は、この ajax 呼び出しから正しく返されるデータに依存しているため、場合によっては期待どおりに返されないという事実が、ユーザー (つまり私!) の問題を引き起こしています。
ここで、まったく同じ呼び出しをもう一度行うと、最初の呼び出しが間違った応答を返した直後に、サーバーは正しい応答を返します!
サーバーの問題には立ち入りたくありません。現在解決中ですが、いつ完了するかはわかりません。そのため、サーバーの問題が解決されている間、サーバーが間違った応答を返す時間を処理するために、何らかのキャッチを ajax 要求に入れ、すぐにまったく同じ呼び出しを再度行いたいと考えています。サーバーの問題が解決されるまで、これはユーザーの苦情を止めるための短期的な修正にすぎないことに注意してください。
私が現在持っているものはこれに似ています:
$.ajax({
type: "GET",
data: data,
success: function(data, textStatus, jqXhr){
// Do stuff...
}
});
サーバーがぐらつきをスローすると、data
未定義として戻ってきます。したがって、私が本当にやりたいことは、そうであるかどうかをテストしdata
、undefined
そうであれば、同じ ajax リクエストに対して同じ呼び出しを再度行うことです (私が行ったすべてのテストは、2 回目のラウンドで正しい応答が受信されることを示しています!)。
したがって、私には、これGoto
は未定義のテスト内のステートメント (あえぎ、ショック、恐怖!!!) の良い使用例のように感じますが、JS でそれを実行できるかどうかさえわかりません。かなり悪い習慣と見なされます。
私はそれを回避する方法がいくつかあることを知っています。
呼び出しを
while(wasAjaxCallSuccessful){}
ループ内に配置して、ajax リクエストを同期に設定し、not として戻ってきたwasAjaxCallSuccessful
場合にのみ変数を true に設定できます。しかし、それは Goto ステートメントを使用するのと同じくらい気分が悪いです (それが許可されていれば)。data
undefined
data == undefined
別のオプションは、テスト内で ajax リクエストへの呼び出しを繰り返すことです。しかし、繰り返しますが、それも間違っているように感じます。
それで、かなり珍しいシナリオではありますが、これを処理する最も適切な方法と考えられるのは何だろうと思いましたか?