2010-10-22 30 views

Respuesta

3

supongo que el fuego los json request sobre un objeto XMLHttpRequest o en otras palabras, usted está utilizando .ajax(). En general, puede cancelar una solicitud ajax utilizando .abort().

var xhr = $.ajax({}); 

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

desde .ajax() devuelve el XHR evento original se puede almacenar en algún lugar y que abortar esa solicitud. Por supuesto, tendría que crear algún tipo de "lógica de solicitud" para manejar estas cosas. Ejemplo:

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

uso como:

var json_requests = xhrmanager(); 

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

json_requests.clearAll(); 
0

una primera, básica, tentativa sería: acaba de hacer una pequeña desviación de la solicitud (por ejemplo, 100 ms.). así que solo necesita reiniciar el temporizador cada vez que se presiona una tecla.

por ejemplo.

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

segundo intento sería: la solicitud debe ser una variable. cada vez que ingresa su lógica de solicitud, verifique la variable contra nulo (algún tipo de: patrón de doble bloqueo). Entonces, si la variable no es nula, sabrá que se está realizando una solicitud. por lo tanto, almacena la solicitud anterior en la variable, puede cancelarla.

por ejemplo.

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

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