2010-11-14 8 views
9

J'ai cherché et ce problème semble simple mais ne trouve pas de réponse. J'ai plusieurs demandes appelant une URL différente. Mais pour chaque URL, je veux seulement le résultat une fois et il doit être le dernier dans le même url appelé. Mon problème est maintenant "comment obtenir le dernier seulement?" Je regardais cela et il semble être 3 ans:Obtenir la dernière requête ajax et d'abandonner les autres

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

Toute autre façon de le faire bien et propre? S'il y a quelque chose comme ça, ce serait parfait:

queue: "getuserprofile", 
cancelExisting: true 

(où l'ajax existant dans la file d'attente getuserprofile sera annulée)

Merci

Répondre

10

This explains comment utiliser jQuery pour faire un appel ajax et comment l'avorter. Tout ce que vous devez faire est de créer un tableau qui stocke chaque requête. Vous pouvez alors annuler la demande précédente en ajoutant la nouvelle.

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

Puisque nous voulons seulement le résultat de la dernière demande, c'est très simple et cela fonctionne.

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

seule la dernière requête est exécutée.

0

Au lieu d'utiliser la bibliothèque, vous pouvez utiliser la méthode de base jquery Ajax:

beforeSend:{}

Par exemple:

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(){} 

});