2010-04-25 6 views
3

édité: Voici ce que je dois:comment retourner une réponse de la poste dans une variable? jQuery

sendpost = function(a,b,c){ 
    return jQuery.post('inc/operations.php', {a:b}, c, "json"); 
}, 

rotate = function(callback){ 
    //.... 
    alert(callback); 
} 

sendpost('operation', 'test', rotate) 

ancien poste: i utiliser cette fonction pour retourner la réponse du message:

$.sendpost = function(){ 
    return jQuery.post('inc/operations.php', {'operation':'test'}, "json"); 
}, 

je veux faire quelque chose comme ceci:

dans:

$.another = function(){ 
    var sendpost = $.sendpost(); 
    alert(sendpost); 
} 

mais je reçois: [object XMLHttpRequest]

si j'imprimer l'objet avec:

jQuery.each(sendpost, function(i, val) { 
    $(".displaydetails").append(i + " => " + val + "<br/>"); 
}); 

je reçois:

details abort => function() { x && h.call(x); g("abort"); } 
dispatchEvent => function dispatchEvent() { [native code] } 
removeEventListener => function removeEventListener() { [native code] } 
open => function open() { [native code] } 
setRequestHeader => function setRequestHeader() { [native code] } 
onreadystatechange => [xpconnect wrapped nsIDOMEventListener] 
send => function send() { [native code] } 
readyState => 4 
status => 200 
getResponseHeader => function getResponseHeader() { [native code] } 
responseText => mdaaa from php 

comment revenir seulement la réponse à la variable?

+0

Pourquoi diable mettez-vous toutes vos fonctions à l'intérieur '' $? – SLaks

+0

sinon je reçois: $ .functionname n'est pas une fonction – robertdd

+1

* cris *. $ est l'objet jQuery. Si vous définissez des fonctions normalement ('function bar() {alert ('Foo');}'), vous n'appelez PAS la fonction en utilisant '$ .bar()', c'est simplement 'bar()'; – Matt

Répondre

4

Ceci n'est pas possible.

Les appels AJAX sont asynchrones, ce qui signifie que votre code continue de s'exécuter avant que le serveur envoie une réponse. Lorsque l'instruction return s'exécute, il n'y a pas encore de réponse du serveur

Il est possible de faire un appel AJAX synchrone, mais cela gèlera complètement le navigateur et devrait être évité à tout prix. Au lieu de cela, vous devriez faire en sorte que votre fonction prenne un rappel qui recevra la réponse du serveur, et appeler ce rappel du rappel $.post. (Voici comment les fonctions AJAX jQuery renvoient des valeurs)

EDIT: Par exemple:

$.sendpost = function(callback) { 
    return jQuery.post('inc/operations.php', {'operation':'test'}, callback, "json"); 
}; 

$.another = function() { 
    $.sendpost(function(response) { 
     alert(response); 
    }); 
}; 
+0

comment je peux faire un rappel pour recevoir la réponse du serveur? pouvez-vous poster un petit exemple? Merci! – robertdd

+0

Je reçois cette erreur dans firebug: 'e.success.call n'est pas une fonction' – robertdd

+0

Qu'avez-vous écrit exactement? – SLaks

Questions connexes