Synkrone og asynkrone anmodninger
I nogle tilfælde skal du læse mange eksterne filer. Dette er en standardfunktion, som bruger XMLHttpRequest
-objektet asynkront for at skifte indholdet af den læste fil til en specificeret lytter.
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);}
Brug:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
Signaturen for hjælpefunktionen loadFile erklærer (i) en mål-URL, der skal læses (via en HTTP GET-anmodning), (ii) en funktion, der skal udføres ved vellykket afslutning af XHR-operationen, og (iii) en vilkårlig liste over yderligere argumenter, der sendes gennem XHR-objektet (via arguments
-egenskaben) til callback-funktionen for succes.
Linje 1 deklarerer en funktion, der påkaldes, når XHR-operationen afsluttes med succes. Den påkalder til gengæld den callback-funktion, der er angivet i påkaldelsen af loadFile
-funktionen (i dette tilfælde funktionen showMessage
), som er blevet tildelt en egenskab ved XHR-objektet (linje 11). De yderligere argumenter (hvis der er nogen), der er leveret til påkaldelsen af funktionen loadFile, “anvendes” på kørslen af callback-funktionen.
Linje 5 erklærer en funktion, der påkaldes, når XHR-operationen ikke lykkes.
Linje 11 gemmer den succes-callback, der er givet som andet argument til loadFile
, i XHR-objektets callback
-egenskab.
Linje 12 skærer det array af argumenter, der er givet til påkaldelsen af loadFile
, ud. Begyndende med det tredje argument indsamles alle resterende argumenter, tildeles arguments-egenskaben for variablen xhr
, overføres til succes-callback-funktionen xhrSuccess
. og leveres i sidste ende til callback-funktionen (i dette tilfælde showMessage
), som påkaldes af funktion xhrSuccess
.
Linje 15 angiver true for sin tredje parameter for at angive, at anmodningen skal håndteres asynkront.
Linje 16 iværksætter faktisk anmodningen.