Ich möchte jQuery Ajax verwenden, um Daten von einem Server abzurufen.
Ich möchte die Definition der Erfolgsrückruffunktion .ajax()
wie folgt außerhalb des Blocks platzieren. Muss ich die Variable also dataFromServer
wie folgt deklarieren , damit ich die vom Erfolgsrückruf zurückgegebenen Daten verwenden kann?
Ich habe gesehen, dass die meisten Leute den Erfolgsrückruf innerhalb des .ajax()
Blocks definieren. Ist der folgende Code also korrekt, wenn ich den Erfolgsrückruf außerhalb definieren möchte?
var dataFromServer; //declare the variable first
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData(dataFromServer)
})
}
function handleData(data) {
alert(data);
//do some stuff
}
quelle
deferred objects
Ding vorgestellt? Ich habe es noch nie gesehen. Außerdem scheint es etwas chaotisch zu sein, da sich der Code, der definiert, welcher Rückruf verwendet werden soll, an einem anderen Ort befindet als der eigentliche AJAX-Aufruf.success:
. Das Entkoppeln des Rückrufs von der AJAX ist eine gute Sache! Siehe die Notizen, die ich gerade am Ende meiner Antwort hinzugefügt habe.$.get()
beispielsweise verwendet worden wäre, wäre es unmöglich gewesen, einenerror:
Handler hinzuzufügen, da dieser$.get
nicht unterstützt wird. Sie können jedoch ein.fail
zum verzögerten Ergebnis von hinzufügen$.get
.Die "neue" Methode seit jQuery 1.5 (Januar 2011) besteht darin, verzögerte Objekte zu verwenden, anstatt einen
success
Rückruf zu übergeben. Sie sollten Rückkehr das Ergebnis$.ajax
und verwenden Sie dann die.done
,.fail
etc Methoden , um die Rückrufe hinzufügen außerhalb des$.ajax
Anrufs .Dadurch wird die Rückrufbehandlung von der AJAX-Behandlung entkoppelt , und Sie können mehrere Rückrufe, Fehlerrückrufe usw. hinzufügen, ohne jemals die ursprüngliche
getData()
Funktion ändern zu müssen. Es ist eine gute Sache, die AJAX-Funktionalität von den danach auszuführenden Aktionen zu trennen! .Zurückgestellte ermöglichen auch eine viel einfachere Synchronisation mehrerer asynchroner Ereignisse, mit denen Sie nicht einfach umgehen können
success:
Zum Beispiel könnte ich mehrere Rückrufe hinzufügen, einen Fehlerbehandler, und warten, bis ein Timer abgelaufen ist, bevor ich fortfahre:
Andere Teile von jQuery verwenden ebenfalls verzögerte Objekte. Sie können jQuery-Animationen sehr einfach mit anderen asynchronen Vorgängen synchronisieren.
quelle
success:
weil verzögerte Antworten einfach viel besser funktionieren.user:6782 deferred
für viele weitere Beispiele.alert
aber ... würde ich persönlich benutzenconsole.log(data)
oder wenn es ein Array ist:console.table(data)
:)Ich weiß nicht, warum Sie den Parameter außerhalb des Skripts definieren. Das ist unnötig. Ihre Rückruffunktion wird mit den Rückgabedaten als Parameter automatisch aufgerufen. Es ist sehr gut möglich, Ihren Rückruf außerhalb des
sucess:
ie zu definierenDie handleData-Funktion wird aufgerufen und der Parameter von der Ajax-Funktion an sie übergeben.
quelle
Versuchen Sie, Ihren Erfolgshandler wie folgt umzuschreiben:
Die Erfolgseigenschaft der Ajax-Methode erfordert nur einen Verweis auf eine Funktion.
In Ihrer handleData-Funktion können Sie bis zu 3 Parameter verwenden:
quelle
Ich würde schreiben :
quelle
dataFromServer
sodass die erste Zeile entfernt werden kann.nach ein paar stunden damit spielen und fast langweilig werden. Wunder kam zu mir, es funktioniert.
quelle
success : callback
jquery Ihre Funktion auslöst, diecallback
mit dem darin enthaltenendata
Parameter aufgerufen wird .Sie müssen die Variable nicht deklarieren. Die Ajax-Erfolgsfunktion akzeptiert automatisch bis zu 3 Parameter:
Function( Object data, String textStatus, jqXHR jqXHR )
quelle
In Ihrer Komponente, dh eckiger JS-Code:
quelle