Synkrona och asynkrona begäranden
I vissa fall måste du läsa många externa filer. Detta är en standardfunktion som använder XMLHttpRequest
-objektet asynkront för att växla innehållet i den lästa filen till en angiven lyssnare.
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);}
Användning:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
Signaturen för hjälpfunktionen loadFile deklarerar i) en mål-URL som ska läsas (via en HTTP GET-förfrågan), ii) en funktion som ska exekveras när XHR-operationen har slutförts med framgång, och iii) en godtycklig lista med ytterligare argument som skickas via XHR-objektet (via egenskapen arguments
) till callbackfunktionen för framgång.
Linje 1 deklarerar en funktion som anropas när XHR-operationen avslutas framgångsrikt. Den åberopar i sin tur den callback-funktion som anges i åberopandet av loadFile
-funktionen (i det här fallet funktionen showMessage
) som har tilldelats en egenskap hos XHR-objektet (rad 11). De ytterligare argumenten (om några) som anges i anropet av funktionen loadFile ”appliceras” på körningen av callback-funktionen.
Linje 5 deklarerar en funktion som anropas när XHR-operationen misslyckas med att slutföras med framgång.
Linje 11 lagrar callback-funktionen för framgång som anges som det andra argumentet till loadFile
i XHR-objektets callback
-egenskap.
Linje 12 skär upp den argumentmatris som anges i anropet av loadFile
. Från och med det tredje argumentet samlas alla återstående argument in, tilldelas arguments-egenskapen för variabeln xhr
, överförs till callback-funktionen xhrSuccess
för framgång och slutligen till callback-funktionen (i det här fallet showMessage
) som åberopas av funktion xhrSuccess
.
Linje 15 anger true för sin tredje parameter för att indikera att begäran ska hanteras asynkront.
Linje 16 initierar faktiskt begäran.