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

5 jquery

当用户在文本框中键入内容时,使用json自动完成工作.他向服务器提出了许多要求.我如何在jquery中发出新请求时停止旧请求.

我怎么能在jquery中做到这一点

jAn*_*ndy 3

json request我猜你是在某个物体上发射它们,XMLHttpRequest或者换句话说,你正在使用.ajax(). 通常,您可以使用 取消 ajax 请求.abort()

var xhr = $.ajax({});

// somewhere else
if(xhr)
   xhr.abort();
Run Code Online (Sandbox Code Playgroud)

由于.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;
};
Run Code Online (Sandbox Code Playgroud)

用法如:

var json_requests = xhrmanager();

json_requests.create({
   data:  'some=data'
}, function(data) {
   // do something
});

json_requests.clearAll();
Run Code Online (Sandbox Code Playgroud)