2010-08-08 21 views
3

Fondamentalement, je suis en train d'appeler une fonction (fonction 1), qui obtiennent les résultats d'une autre fonction (fonction 2). Et cette fonction 2 fait un appel ajax.Comment obtenir le résultat d'un appel jQuery AJAX puis appeler une autre fonction

Ainsi, le code serait comme ceci:

function f1() { 
    var results = f2(); 
} 

function f2() { 
    $.ajax({ 
     type: 'POST', 
     url: '/test.php', 
     success: function(msg){ 
     } 
    }); 
} 

Je sais que c'est que j'afficher une alerte dans la fonction de la réussite, je reçois les résultats. Mais comment pouvons-nous faire en sorte que ce résultat soit renvoyé?

je tryed faire quelque chose comme cette fonction à l'intérieur 2 sans succès:

retour msg;

Merci pour votre aide

+0

Vous avez parlé dans le poste de Meder à essayer d'avoir plusieurs appels en utilisant le même ajax. Pouvez-vous développer davantage sur ce sujet? –

Répondre

4

En théorie, cela est possible l'utilisation du réglage de jQuery async: false. Ce paramètre rend l'appel synchrone, c'est-à-dire que le navigateur attend jusqu'à ce qu'il soit terminé.

Ceci est considéré comme une mauvaise pratique, cependant, car il peut geler le navigateur. Vous devez restructurer votre script pour pouvoir effectuer les opérations appropriées dans le rappel success au lieu de f1. Je sais que c'est moins pratique que ce que vous faites en f1(), mais c'est la bonne façon de gérer la nature asynchrone d'Ajax.

2

Vous pouvez avec force faire de la synchronisation de la demande (perdre un peu au profit de ajax), mais de faire votre travail de code:

function f2() { 
    var ret = false; 
    $.ajax({ 
     type: 'POST', 
     url: '/test.php', 
     async:false, 
     success: function(msg){ 
      ret = msg 
     } 
    }); 
    return ret; 
} 

Sinon, vous devez ajouter un rappel dans votre fonction success si vous voulez le garder asynchrone ..

function f2() { 
    $.ajax({ 
     type: 'POST', 
     url: '/test.php', 
     async:false, 
     success: function(msg){ 
      doSomething(msg); 
     } 
    }); 
} 
+0

merci pour vos réponses les gars Comme je comprends c'est un problème asynchrone/synch ... Mon but était d'éviter d'avoir le même appel AJAX plusieurs fois, quand j'ai plusieurs choses à faire sur le résultat de l'appel. Donc la façon dont je cherchais est d'avoir la fonction AJAX appelée par une, deux ou plusieurs fonctions différentes ... Mais si je comprends que je dois garder le mode asynchrone, je dois le faire différemment. – kire