Geben Sie $ .get-Daten in einer function mit jQuery zurück

Ich versuche eine function aufzurufen, die jQuery-Code enthält. Ich möchte, dass diese function die Ergebnisse der jQuery-statement zurückgibt. Es funktioniert nicht, und ich versuche herauszufinden, warum.

function showGetResult (name) { var scriptURL = "somefile.php?name=" + name; return $.get(scriptURL, {}, function(data) { return data; }); } alert (showGetResult("John")); 

Die Warnung zeigt ” [object XMLHttpRequest] ” an. Allerdings, wenn ich die jQuery-statement selbst außerhalb einer function $.get(scriptURL, {}, function(data) { alert(data); }) funktioniert es gut -> $.get(scriptURL, {}, function(data) { alert(data); })

Ich möchte in der Lage sein, diesen Code zu verwenden, indem Sie ihn in eine function $.get , die die $.get Daten $.get . Welchen grundsätzlichen Fehler mache ich hier?

Sie haben ein paar verschiedene Fehler. Erstens gibt $ .get den Rückgabewert der Callback-function nicht zurück. Es gibt das XHR-Objekt zurück. Zweitens ist die get-function nicht synchron, sie ist asynchron, also wird showGetResult wahrscheinlich zurückkommen, bevor get abgeschlossen wird. Drittens können Sie nicht etwas aus dem Callback in den äußeren Bereich zurückgeben. Sie können jedoch eine Variable im äußeren Bereich binden und im Callback festlegen.

Um die gewünschte functionalität zu erhalten, müssen Sie $ .ajax verwenden und die async-Option auf false setzen. Dann können Sie eine Variable im äußeren Bereich definieren und sie im Ajax-Callback zuweisen und diese Variable aus der function zurückgeben.

 function showGetResult( name ) { var result = null; var scriptUrl = "somefile.php?name=" + name; $.ajax({ url: scriptUrl, type: 'get', dataType: 'html', async: false, success: function(data) { result = data; } }); return result; } 

Es wäre jedoch wahrscheinlich besser, wenn Sie herausfinden, wie Sie in der Callback-function selbst das tun, was Sie wollen, anstatt von asynchronen zu synchronen Aufrufen zu wechseln.

Der grundlegende Fehler, den Sie machen, besteht darin, dass der AJAX-Aufruf asynchron erfolgt. Wenn Sie also zurückkehren, ist das Ergebnis noch nicht fertig. Damit dies funktioniert, können Sie Ihren Code folgendermaßen ändern:

 $(function() { showGetResult('John'); }); function showGetResult (name) { $.get('somefile.php', { // Pass the name parameter in the data hash so that it gets properly // url encoded instead of concatenating it to the url. name: name }, function(data) { alert(data); }); } 

Sieht so aus, als ob Sie eine synchrone Anfrage wünschen: Wie kann ich jQuery dazu bringen, eine synchrone anstatt einer asynchronen Ajax-Anfrage durchzuführen?

Oder Sie möchten Callback an Ihre function übergeben:

 function showGetResult (name, callback) { var scriptURL = "somefile.php?name=" + name; return $.get(scriptURL, {}, callback); } showGetResult("John", function(data){ alert(data); }); 

Der grundlegende Fehler ist der “asynchrone” Teil von AJAX. Da Sie nicht wissen, wie lange der Server benötigt, um eine Antwort zurückzusenden, “blockieren” AJAX-Methoden niemals – das heißt, Sie rufen nicht zum Server und warten nur dort auf das Ergebnis. Stattdessen gehen Sie zu etwas anderem über, aber Sie richten eine Methode ein, die “Callback” genannt wird, die ausgetriggers wird, wenn die Ergebnisse zurückkommen. Diese Methode ist verantwortlich für alles, was mit den Daten getan werden muss (z. B. Einfügen in die Seite).

Das ist der falsche Weg. Die function (Daten) ist eine callbackfunktion , so dass, wenn return $ .get ausgeführt wird, die Callback-function möglicherweise nicht aufgerufen wurde.

Besser rufen Sie Ihre Post-Daten-function von function (Daten) -Methode abrufen.