编辑:一旦您中止请求,浏览器就不应再监听它了。所以当它到达事件队列中的响应时,我猜它应该把它扔掉。
但是,如果您遇到问题,可以尝试以下方法:
如果检测到不再需要运行,您能否检查您的成功函数 + 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);
改变计时器以尝试匹配(尽可能接近)页面的加载时间。我还没有“它发生”出现。