サーバーへの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リクエストは複数の「コールバックイベント」をトリガーしませんか?