2009-11-23 6 views
0

J'utilise jQuery dans notre projet Java et 3 requêtes AJAX pour actualiser 3 colonnes. Le problème est que si vous cliquez sur quelque chose avant la réponse reçue, il arrive que l'un des JSP ait l'intention de renvoyer une réponse dans un DIV particulier, écrase toute la page et a été renvoyé comme une nouvelle page. J'utilise le plugin AJAX file d'attente qui devrait annuler les requêtes dans la file d'attente, mais je pense qu'il ne fonctionne pas ..AJAX mauvaise réponse

Je fais cette requête AJAX 3 fois dans une file d'attente:

$('#col<%=col%>') 
    .html("<div style='float: left; width: 100%'><img src='css/ajax-loader2.gif' /></div>"); 
var url='CoreFetchCategoryHandler.jsp'; 
ajaxManager.add({ 
    success: function(html) { 
     $('#col<%=col%>').html(html); 
    }, 
    type: "POST", 
    url: url, 
    data: "<%=baseString%><%=keywordsString%>category=<%=columnnCategory%>&showItems=30", 
    cache: true, 
    error: function(a, b) {}, 
    abort: function() { 
     $.manageAjax.clear("cacheQueue", true) 
    } 
}); 

Quelqu'un peut-il me aider avec ça? Merci!

+0

Pouvez-vous poster une partie de votre code, qui a le plus à faire avec le problème? –

+0

Je fais cette requête AJAX 3 fois dans une file d'attente: $ ('# col <%=col%>') .html ("

"); var url = 'CoreFetchCategoryHandler.jsp'; ajaxManager.add ({ succès: function (html) {\t \t \t \t \t $ ('# col <%=col%>') .html (html);} , \t \t \t \t \t \t \t Type \t: "POST" , url: url, \t \t \t \t \t \t \t \t \t \t \t données: « < % = Basestring%><% = keywordsString%> category = <% = columnnCategory%> & showItems = 30" , \t \t \t \t \t \t \t \t \t \t cache \t: true, \t \t \t \t \t \t \t \t \t \t \t erreur: la fonction (a, b) {}, \t \t \t \t \t \t \t \t abandonner: function() {$ .manageAjax.clair ("cacheQueue", true)} \t \t \t \t \t \t \t \t \t \t \t}); –

+0

et si l'une des requêtes AJAX a été interrompue - le résultat est que CoreFetchCategoryHandler.jsp remplace la page entière ... –

Répondre

0

Je vous suggère de prendre plus de contrôle sur vos demandes plutôt que (ou aussi?) En utilisant le plugin Queue. Consultez les fonctions ajaxStart(), ajaxStop() et ajaxComplete(). Dès que vous lancez une requête Ajax (en utilisant ajaxStart()), définissez éventuellement un drapeau que vous pouvez vérifier avant que les données des autres colonnes ne soient chargées ou rafraîchies. Cet événement se déclenche à chaque fois qu'une requête AJAX commence et il n'y en a aucune déjà active. Grâce à cette approche, vous pouvez activer ou désactiver vos événements de clic ou les éléments DOM qui y sont attachés, de sorte que les utilisateurs soient obligés d'attendre qu'une requête Ajax soit terminée avant de pouvoir lancer la suivante.

De même, la fonction ajaxStop() se déclenche à chaque fois que toutes les requêtes AJAX sont terminées. De cette façon, vous pouvez exercer un contrôle plus granulaire sur l'ordre dans lequel vos données sont chargées.

+0

Je vais essayer, merci. –