編集:リクエストを中止するとすぐに、ブラウザはそれをリッスンしなくなります。したがって、イベント キュー内の応答に到達すると、それを破棄する必要があると思います。
ただし、問題が発生した場合は、次の方法を試すことができます。
実行する必要がなくなったことを検出した場合は、成功関数 + URL をチェックして、それ自体をキャンセルできますか?
たとえば、(このようにするべきだと言っているわけではありません。jqXHR リクエストに何も添付しようとはしていません):
var numReq = 0, lastReq;
$('#button').on('click', function(e) {
if (lastReq) { lastReq.abort(); }
numReq ++;
lastReq = $.ajax({
success : function(d, s, x) {
if (x.reqNum < numReq) { return; }
}
});
lastReq.reqNum = numReq;
});
私の理解では、ボタンのクリックが完了するまで ajax イベントはイベント キューに追加されないため、(理論的には) ajax の後に reqNum を設定することを心配する必要はありません ...
次のコードも試しました。
var numReq = 0, lastReq, timer = 100,
c = setInterval(function() {
if (lastReq) { lastReq.abort(); }
numReq ++;
lastReq = $.ajax({
url : 'index.html',
cache : false,
success : function(d, s, x) {
if (x.reqNum < numReq) { console.log('it happens'); }
}
});
lastReq.reqNum = numReq;
}, timer);
タイマーを変更して、ページの読み込み時間に (できるだけ近づけて) 一致させようとします。私は「それが起こる」ということはありませんでした。