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