2010-10-22 11 views

risposta

3

immagino il fuoco coloro json request su un oggetto XMLHttpRequest o in altre parole, si sta utilizzando .ajax(). In generale, è possibile annullare una richiesta Ajax utilizzando .abort().

var xhr = $.ajax({}); 

// somewhere else 
if(xhr) 
    xhr.abort(); 

dal .ajax() ritorna l'originale XHR caso in cui si possono memorizzare che da qualche parte e annullare la richiesta. Ovviamente dovresti creare qualche tipo di "logica di richiesta" per gestire questa roba. Esempio:

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; 
}; 

utilizzo come:

var json_requests = xhrmanager(); 

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

json_requests.clearAll(); 
0

un primo, fondamentale, il tentativo sarebbe: basta fare un piccolo offset per la richiesta (ad esempio, 100 ms.). quindi hai solo bisogno di resettare il timer ogni volta che viene premuto un tasto.

es.

var timeout; 
var textBox = $('#textbox'); 
textBox.change(function() { 
    if (timeout) { 
     clearTimeout(timeout); 
    } 
    var callingMethod = /* insert your method for the request */; 
    timeout = setTimeout(callingMethod, 100); 
}); 

secondo tentativo: la richiesta dovrebbe essere una variabile. ogni volta che inserisci la tua logica di richiesta verifica la variabile rispetto a null (una specie di schema a doppio blocco). quindi se la variabile non è nulla, sai che sta succedendo una richiesta. quindi memorizzi la vecchia richiesta nella variabile puoi cancellarla.

es.

var request; 
function DoMagicThing() { 
    if (request) { 
     request.abort(); 
     request = null; 
    } 

    request = $.ajax({ 
     /* insert options here */, 
     complete = function() { 
      request = null; 
     } 
    }); 
} 
Problemi correlati