Skip to main content
 首页 » 编程设计

jquery之如何在向服务器发送新的 jsonrequest 时取消 JSON 请求

2026年03月27日1201tuyile006

当用户在文本框中输入一些内容时,自动完成功能会使用 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();