2010-10-19 6 views
2

Cette fonction retourne wont une valeur, même si l'appel ajax passe par correctementavec jquery ajax en elle pas de valeur retour

Fonction:

function queryData(request) 
{ 
    var ret = null; 
    $.ajax({ 
     url: 'ajax.php', 
     data: 'requestdata='+request, 
     dataType: 'json', 
     type: 'post', 
     success: function (j) { 
      if(j.ok == true) 
       return j.data; 
      else 
       return 'error'; 
     } 
    }); 
    return 'error'; 
} 
+0

duplicata possible de [comment puis-je accéder à la valeur de retour de cette requête ajax?] (Http://stackoverflow.com/questions/3829390/how-do-i-access-the-return-value-of-this -ajax-demande) – Guffa

Répondre

3

La fonction ajax fonctionne de manière asynchrone, ce qui signifie qu'elle exécutera la fonction de réussite lorsqu'elle récupérera le résultat du serveur.

La fonction queryData retournera toujours 'erreur' en raison de la nature des requêtes AJAX (au moins effectuées de cette façon). Vous pouvez forcer les requêtes ajax à être synchronisées, mais ce n'est généralement pas le comportement souhaité.

Vous devez ajouter la logique que vous voulez dans votre fonction de réussite, plutôt que d'essayer de la renvoyer. Vous pouvez passer une fonction nommée à l'option success si vous préférez cela. Voir la documentation de jQuery sur ajax here.

0

Vous ne pouvez pas faire cela.

AJAX est asynchrone, ce qui signifie que votre fonction retournera avant que le serveur envoie une réponse. Vous devez transmettre la valeur à l'aide d'un rappel, comme le fait $.ajax.

0

Cette fonction renvoie une valeur avant la fin de l'appel ajax. Un appel ajax est une opération asynchrone, donc quand vous faites l'appel de $ .ajax(), il retourne immédiatement, votre fonction s'exécute dans le retour 'erreur' sur la ligne 16 et retourne 'erreur'. Quelques secondes plus tard, l'appel ajax se termine et votre fonction de succès est exécutée, mais sa valeur de retour ne va nulle part.

0

La fonction success sera appelée de manière asynchrone. Donc d'abord la fonction initialise la requête ajax et se termine par la dernière instruction return 'error';. Après cela, après la réception de la réponse du serveur, la fonction success sera appelée à partir de jQuery. Il revient au jQuery mais ne sera pas utilisé.

Questions connexes