1

サーバーへのjsonp呼び出しを行おうとしていますが、コードは次のようになります。

関数 myCallback(データ) {
  var self = this;
  var currentId = data.ID;
  if(currentId == self.latestId){
    console.log("最新のリクエストが応答しました。何かをしてください");
    self.latestId = new Date().getTime();
  } そうしないと {
    console.log("古いリクエストが応答したので、気にしません");
  }
};

関数 makeCall() {
  var self = this;
  self.latestId = new Date().getTime();
  var url = serverUrl + "&ID="+ self.latestId;
  $.ajax(url,{
   データ型: "jsonp",
   タイムアウト: 10000、
   キャッシュ: 真、
   jsonp:"コールバック",
   jsonpCallback: "myCallback",
   エラー: 関数 (id) {
     関数を返す() {
         if(id == self.latestId) {
           console.log("latest request errored out");//タイムアウトが原因の可能性があります
           self.latestId = new Date().getTime(); // latestid を更新して、mycallback がこのリクエストを無視するようにします
         }
         そうしないと {
           console.log("古いリクエストがエラーになったので、もう気にしません");
         }
     }
   }(self.latestId)
  });
};

サーバーからの応答は myCallback({some_data...}); のようになります。

リクエストが1つしか発生しない場合は期待どおりに動作しますが、サーバーが時間内に正常に応答している間、Idコントロール以外の同じデータで4〜5のリクエストを起動すると、myCallbackにもエラーにもなりません。これは一貫して発生するわけではないため、同期の問題のようです。複数のクエリを作成しているときに名前付きコールバックを使用すると、同期の問題が発生する可能性があります。複数のクエリの場合、最後のクエリのみが勝つはずですが、ここでは機能していないようです。すべてのリクエストで同じコールバック名が原因で問題になる可能性はありますか?

私はここで何が起こっているかについてはちょっと無知です.誰かがこのようなことに直面したことがありますか.

編集:言及されている並列リクエストのコールバック名と関係があるようですjQueryの並列JSONPリクエストは複数の「コールバックイベント」をトリガーしませんか?

4

0 に答える 0