Synchrone und asynchrone Anfragen
In manchen Fällen muss man viele externe Dateien lesen. Dies ist eine Standardfunktion, die das XMLHttpRequest
-Objekt asynchron verwendet, um den Inhalt der gelesenen Datei an einen bestimmten Listener zu übergeben.
function xhrSuccess() { this.callback.apply(this, this.arguments);}function xhrError() { console.error(this.statusText);}function loadFile(url, callback /*, opt_arg1, opt_arg2, ... */) { var xhr = new XMLHttpRequest(); xhr.callback = callback; xhr.arguments = Array.prototype.slice.call(arguments, 2); xhr.onload = xhrSuccess; xhr.onerror = xhrError; xhr.open("GET", url, true); xhr.send(null);}
Anwendung:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
Die Signatur der Utility-Funktion loadFile deklariert (i) eine Ziel-URL, die gelesen werden soll (über eine HTTP-GET-Anforderung), (ii) eine Funktion, die bei erfolgreichem Abschluss der XHR-Operation ausgeführt werden soll, und (iii) eine beliebige Liste zusätzlicher Argumente, die über das XHR-Objekt (über die arguments
-Eigenschaft) an die Erfolgs-Callback-Funktion übergeben werden.
Zeile 1 deklariert eine Funktion, die aufgerufen wird, wenn die XHR-Operation erfolgreich abgeschlossen wurde. Sie ruft ihrerseits die Callback-Funktion auf, die im Aufruf der loadFile
-Funktion (in diesem Fall die Funktion showMessage
) angegeben ist, die einer Eigenschaft des XHR-Objekts zugewiesen wurde (Zeile 11). Die zusätzlichen Argumente (falls vorhanden), die beim Aufruf der Funktion loadFile angegeben wurden, werden auf die Ausführung der Callback-Funktion „angewandt“.
Zeile 5 deklariert eine Funktion, die aufgerufen wird, wenn die XHR-Operation nicht erfolgreich abgeschlossen werden kann.
Zeile 11 speichert den Erfolgs-Callback, der als zweites Argument für loadFile
angegeben wurde, in der Eigenschaft callback
des XHR-Objekts.
Zeile 12 zerlegt das Argumenten-Array, das beim Aufruf von loadFile
angegeben wurde. Beginnend mit dem dritten Argument werden alle verbleibenden Argumente gesammelt, der Argumente-Eigenschaft der Variablen xhr
zugewiesen, an die Erfolgs-Callback-Funktion xhrSuccess
übergeben und schließlich an die Callback-Funktion (in diesem Fall showMessage
) geliefert, die von der Funktion xhrSuccess
aufgerufen wird.
Zeile 15 gibt für ihren dritten Parameter true an, um anzugeben, dass die Anforderung asynchron behandelt werden soll.
Zeile 16 leitet die Anforderung tatsächlich ein.