2010-06-20 5 views
0

Je veux avoir une fonction simple où je peux insérer un sqlquery et obtenir une réponse de la base de données en JSON format comme celui-ci:

function ExecuteQuery(query){ 
    $.post("sql.php", { "query": query }, 
    function(data){ return data; }, 
    "json"); 
    } 

La réponse que je reçois est définie, je pense que j'ai mal compris quelque chose de très basique mais je ne sais pas quoi, quelqu'un peut-il me donner un indice?

+0

Cela demande souvent ... se Voici quelques exemples: http://stackoverflow.com/questions/1229307/jquery-getjson-return-value-to-the-caller-function http://stackoverflow.com/questions/2470467/return-value-from-ajax-request-to-another-function http://stackoverflow.com/questions/1712800/having-trouble-getting-a-return-value-from -a-javascript-callback – Shog9

Répondre

1

Le problème est que vous voulez quelque chose que vous ne pouvez pas avoir :-) Au lieu de penser en termes d'une fonction qui rendement une valeur, vous écrivez une fonction qui prend une autre fonction comme argument et appelle lorsque le les données sont disponibles.

function ExecuteQuery(query, callback){ 
    $.post("sql.php", { "query": query }, 
    function(data){ callback(data); }, 
    "json"); 
} 

Maintenant, lorsque vous appelez cette fonction, vous passerez une fonction qui peut prendre la réponse du serveur et faire quelque chose avec elle.

ExecuteQuery("whatever", function(results) { 
    // do something with "results" 
}); 
+0

C'était ma première solution mais je pensais que je pourrais faire comme un retour- fonction. Mais vous avez en quelque sorte résolu mon problème, maintenant je n'ai plus besoin de l'essayer, merci! – Cinaird

+0

Vous n'avez pas besoin de dire 'function (data) {callback (data); } ', vous pouvez simplement dire' callback', n'est-ce pas? – Skilldrick

+0

en effet vous pouvez Skilldrick – redsquare

0

Vous devez faire quelque chose avec les données - vous ne pouvez pas simplement le retourner. La fonction externe revient instantanément, mais la fonction interne revient plus tard, après l'aller-retour du serveur. Essayez de faire alert(data) pour voir comment cela fonctionne.

+0

Oui cela fonctionne bien mais le ting est que je veux retourner les données, j'ai essayé d'enregistrer les données aussi mais le même problème – Cinaird