2012-09-26 1 views
2

code de psuedo: quand (x, y) .then (z);Les rappels d'Ajax tirent dans un ordre inattendu

où y est un appel à une fonction qui fait un appel ajax comme dans:

function y(......){ 
    var p = $.ajax(...........); 
    p.done(callMeFirst); 
    return p; 
} 

Maintenant, je crois comprendre, étant donné que x est déjà résolu lors d'un appel ajax succès « callMeFirst » en cas d'incendie d'abord suivi par « z »

mais ce qui se passe est que « z » feux d'abord, puis « callMeFIrst »

Je ne comprends pas pourquoi ce qui se passe ou comment fixer comme tous nos appels ajax courir à travers « y 'et son traitement post-appel est nécessaire avant tout autre callback pour le gérer.

TIA Rob

+3

C'est parce que ajax est asynchrone. La solution serait d'appeler z dans p.done – vinayr

+0

Je sais que ajax est async ... C'est pourquoi je m'attends d'abord à ce que le 'callMeFirst' se déclenche comme il a été enregistré en premier, puis 'z' pour tirer après cela comme il était deuxième enregistré. Et je ne peux pas le mettre dans p.done comme z dépend à la fois x et y complétant tandis que callMeFirst dépend seulement de l'appel ajax complétant – blackmamba

+0

"quand", "fait" etc sont bien écrit ici: http: // joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/ –

Répondre

-1

Utilisez async pour le rendre synchronisé

return $.ajax({ 
     url : url, 
     type : "POST", 
     cache: false, 
     async: false 
}).responseText; 
+0

Synchroniser les appels ajax = t3h mauvais. – moonwave99

+1

@ moonwave99 - D'accord, vous ne devriez jamais définir async false sur les appels ajax – blackmamba

Questions connexes