当用户在文本框中输入一些内容时,自动完成功能会使用 json,他会向服务器发出大量请求。在 jQuery 中发出新请求时如何停止旧请求?
请您参考如下方法:
我猜您是通过 XMLHttpRequest 对象触发这些 json 请求,或者换句话说,您正在使用 .ajax()。通常,您可以使用 .abort() 取消 ajax 请求。
var xhr = $.ajax({});
// somewhere else
if(xhr)
xhr.abort();
由于 .ajax() 返回原始 XHR 事件,您可以将其存储在某处并中止该请求。 当然,您必须创建某种“请求逻辑”来处理这些东西。示例:
var xhrmanager = function() {
var requests = [],
self = {};
self.create = function(params, cb){
if(typeof params === 'object') {// additional checks here
var xhr = $.ajax($.extend({
url: '/path/script.pl',
dataType: 'json',
type: 'GET',
success: function(data, status, req){
if(typeof cb === 'function')
cb.apply(this, [data]);
},
complete: function(req, status) {
var pos = $.inArray(req, requests);
if(pos > -1)
requests.splice(pos, 1)
}
}, params || {}));
}
};
self.clearAll = function(){
for(var i = 0, len = requests.length; i < len; i++){
requests[i].abort();
}
};
return self;
};
用法如下:
var json_requests = xhrmanager();
json_requests.create({
data: 'some=data'
}, function(data) {
// do something
});
json_requests.clearAll();
