2010-09-01 6 views
0

Je veux écrire une fonction javascript, qui va faire une requête ajax au script PHP et renvoie son résultat. Voilà comment il ressemble:Requête JQuery ajax dans une fonction: comment retourner la valeur obtenue?

function myjsfunc(some_data) 
{ 
    $.post(
      "/myscript.php", 
      { some_data: some_data }, 
      function(response) 
      { 
       result = response; 
      } 
     ); 
    return result; 
} 

Le problème est que result est toujours définie. Cela peut être parce que la variable result n'est pas dans l'espace de noms myjsfunc? Ou est-ce parce que le résultat de la fonction de réussite est reçu après la fin de la fonction principale?

De toute façon, comment puis-je obtenir le résultat souhaité? Y a-t-il un moyen?

+0

Quel est le résultat obtenu? –

+1

duplication possible de [Impossible d'obtenir la valeur de retour correcte à partir d'un appel jQuery Ajax] (http://stackoverflow.com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call – Quentin

+0

résultat est utilisé dans de nombreuses autres fonctions à des fins différentes, donc j'ai besoin de retourner les données, ne pas simplement mettre dans un tag HTML ou quoi que ce soit. –

Répondre

5

Vous ne pouvez pas renvoyer le résultat car il n'est pas défini au moment où votre fonction externe se termine. Votre appel AJAX se produit de manière asynchrone et la fonction de rappel est appelée après le POST. Pour faire face à votre résultat, vous devez faire quelque chose comme ceci:

function myjsfunc(some_data) { 
    $.post("/myscript.php", { some_data: some_data }, function(response) { 
      if (some_data.prop) { 
       myReturnHandler(response); 
      } else { 
       myOtherHandler(response); 
      } 
     } 
    ); 
} 

Si vous définissez myReturnHandler séparément et il faut savoir comment prendre en charge le traitement des données de résultat.

- ÉDITÉ -

Vous pouvez également effectuer des tests pour déterminer comment gérer votre réponse. Ajout de code supplémentaire à démontrer.

+0

Cela fonctionnerait, sauf que (à partir du commentaire sur la question) OP veut utiliser la fonction à des fins différentes. Cela permettrait seulement une exécution de code possible pour la réponse. – user113716

+0

Pas nécessairement. Selon le type de corps de réponse qu'il obtient, il peut y avoir une logique de traitement dans myReturnHandler. Il peut envoyer à d'autres fonctions en fonction du contenu, ou de l'appelant, ou de toute autre valeur qu'il passe. –

+0

g.d.d.c - Point valide. – user113716

Questions connexes