2010-11-14 19 views
9

He estado buscando y este problema parece simple pero no puedo encontrar la respuesta. Tengo varias solicitudes llamando a diferentes url. Pero para cada url, solo quiero el resultado una vez y debe ser el último en la misma URL que se llama. Mi problema ahora es "¿cómo conseguir el último solo?" Miré a esto y parece que es 3 años de edad:Obtenga la última solicitud de ajax y cancele otras

http://plugins.jquery.com/project/ajaxqueue

Cualquier otra forma de hacerlo muy bien y limpiamente? Si hay algo como esto, sería perfecto:

queue: "getuserprofile", 
cancelExisting: true 

(donde el Ajax existentes en la cola getuserprofile se cancelará)

Gracias

Respuesta

10

This explains cómo usar jQuery para hacer una llamada ajax y cómo abortarlo Todo lo que necesita hacer es crear una matriz que almacena cada solicitud. Luego puede cancelar la solicitud anterior al agregar la nueva.

ajaxRequests = new Array(); 

queueRequest = function(whatever, you, want) { 
    if(ajaxRequests[ajaxRequests.length - 1]) { 
     ajaxRequests[ajaxRequests.length - 1].abort(); 
    } 

    ajaxRequests[ajaxRequests.length] = //Insert New jQuery AJAX call here. 
} 
4

Como solo queremos el resultado de la última solicitud, esto es muy simple y funciona.

var ajax = null; 
var getFoo = function() { 
    if(ajax) ajax.abort(); 
    ajax= $.ajax({}); 
}; 
getFool(); 
getFool(); 
getFool(); 
getFool(); 
getFool(); 
getFool(); 

Solo se ejecuta la última solicitud.

0

En lugar de utilizar la biblioteca, puede utilizar jQuery Ajax método básico:

beforeSend:{}

Por ejemplo:

xhr = jQuery.ajax({ 
      url: /*Your URL*/ 
      type: "POST", 
      data: { 
       //data 
      }, 
      /* if there is a previous ajax request, then we abort it and then set xhr to null */ 
      beforeSend : function() {   
       if(xhr != null) { 
        xhr.abort(); 
       } 
      }, 
success:function(){} 

}); 
Cuestiones relacionadas