JSONを返すURLのAJAXポーリングが新しい応答を返さないようです(jQuery $ .ajax()メソッドを使用)

StackOverflow https://stackoverflow.com/questions/1412901

質問

私のプロジェクトでは、AJAXを使用して、JSON応答の特定のURLをポーリングする必要があります。私が行う最初のAJAX要求は、JSONコンテンツが必要であることをサーバーに警告し、応答の構築とキャッシュを開始して、 {" status" :" pending" } JSONの準備ができるまで、後続の各AJAXリクエストに対して。その時点で、応答がドキュメントに解析および表示できるコンテンツを含むJSONに変更されます。これは、URLが {" status" :" pending" }

URLからJSONを繰り返し要求するように機能するポーリング関数を設定しました。ただし、問題は、応答 {" status" :" pending" } URLに直接移動しても、完全なJSON応答が準備でき、配信されていることがわかります。何らかの理由で、私のポーリング機能はまだ {" status" :" pending" }

ポーリングコードを含むページを更新すると、通常、最初のリクエストで機能します。つまり、完全なJSON応答を取得します。それは何らかのキャッシュの問題だと信じるようになりますが、どこで、またはなぜかはわかりません。各AJAXリクエストが新しい応答を受け取るべきではありませんか、それとも $。ajax()呼び出しで設定できるものですか?

現在使用しているコードは次のとおりです。

function ajax_poll() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a string containing the URL to poll
    dataType: 'json',
    error: function(xhr_data) {
      display_error();
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        poll++; // increment poll counter // poll is a global variable to track the number of requests made
        if (poll < POLLS) { // POLLS is a global variable to set the maximum number of requests
          setTimeout(function() { ajax_poll(); }, INTERVAL); // wait INTERVAL before another AJAX request
        } else {
          display_error();
        }
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

success()は、ページにJSONコンテンツ(つまり、ポーリング中に利用可能になるのを待っているもの)を表示する関数です。

注目に値することの1つは、コードをローカルでテストし、ローカルの.jsonテストファイルをポーリングしながら、ファイルの内容を {&quot; status&quot;から変更できることです。 :&quot; pending&quot; } 探しているようなコンテンツを含む応答に対して、ポーリングインスタンス間でファイルを保存します。次のポーリングでは、コードは新しいコンテンツを認識し、期待どおりに動作します。ステージング環境では機能していません。

役に立ちましたか?

解決

&quot; cache:false&quot; を追加してみてくださいオプション

他のヒント

これが発生する可能性のある理由を説明するために:GET AJAXリクエストを発行している可能性がありますが、URLを差別化していません(たとえば、クエリ文字列に余分なデータはありません)。

ブラウザはこのリクエストを確認し、完全なリクエストでサーバーにヒットすることさえしません(おそらく条件付き304 GETリクエストを代わりに発行します)。これらすべての最終結果は、あなたが見ていると思われるアクティビティが見えないことです。

この問題を解決する簡単な方法は、AJAXリクエストの結果をキャッシュしないか、POSTリクエストを送信しないことです。キャッシュオプションへの影響については、他の記事で説明しています。 POSTアプローチの問題は、アクションによって何も保存していないため、GETリクエストで意図をよりうまく表現していることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top