2009-10-15 8 views
4

J'ai cette fonction qui fait un appel ajax. Je décris le problème dans le dernier morceau de commentaires de code. En fonction du problème décrit dans les commentaires de code, quels changements sont les meilleurs pour cette situation? En fonction du problème décrit dans les commentaires de code.Ajax jquery succès de rappel synchrone

Répondre

15

Vous devez définir async: false pour les requêtes synchrones comme celui-ci:

function doop(){ 
     var that = this; 
     var theold = $(this).siblings('.theold').html(); 
     var thenew = $(this).siblings('.thenew').val(); 

     $.ajax({ 
       async: false, 
       url: 'doop.php', 
       type: 'POST', 
       data: 'before=' + theold + '&after=' + thenew, 
       success: function(resp) { 
         if(resp == 1) { 
           $(that).siblings('.theold').html(thenew); 
         } 
       } 
     }); 

     // some other code 

     return false; 
} 

voir here pour plus de détails

+0

Je continue à lire que la mise 'async: false' est mauvais, et que' callback' est mieux. Mais je doute que ce soit aussi simple que ça. Lequel recommandez-vous en fonction de ma question mise à jour? – Chris

+3

hmm, en fait la fonction que vous déclarez pour la propriété de succès est la fonction de rappel. En passant, je viens de voir que vous comparez votre résultat à un entier, mais je suis sûr que vous obtenez du texte par défaut, donc ça devrait être 'resp ==" 1 "'. – stefita

+2

btw. vous pouvez définir votre fonction de rappel quelque part en dehors de la requête ajax. Peut-être ce que vous avez vu était exactement cela - une fonction appelée rappel ou si. – stefita

1

Soit vous entreprenez l'appel Ajax synchrone stefita fait remarquer, ou tout simplement déplacer votre code dans le rappel de succès. Pourquoi tu ne peux pas faire ça? Même s'il s'agit d'un autre appel Ajax, cela peut toujours être fait - vous pouvez les imbriquer. Avec les informations que vous nous avez fournies jusqu'à présent (je ne vois pas le code problématique, je n'ai pas assez de connaissances sur votre projet), je ne vois vraiment pas de problème.

+0

Je vois, donc les appels $ (.ajax) peuvent être imbriqués. Ça sonne bien, je vais essayer ça et voir comment ça se passe. – Chris

0

Je préfère utiliser le rappel pour faire le travail car il obtient exactement le même résultat sans pour autant le rendre synchrone. J'utilise le succès: callback, puis je passe le callback en paramètre.

function getData(callback) { 
     $.ajax({ 
      url: 'register/getData', 
      data: "", 
      dataType: 'json', 
      success: callback 
     }); 
    } 

J'appelle alors cette fonction comme ceci:

getData(function(data){ 
    console.log(data); //do something 
    });