Cereri sincrone și asincrone
În unele cazuri, trebuie să citiți mai multe fișiere externe. Aceasta este o funcție standard care utilizează obiectul XMLHttpRequest
în mod asincron pentru a comuta conținutul fișierului citit către un ascultător specificat.
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);}
Utilizare:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
Semnătura funcției utilitare loadFile declară (i) un URL țintă de citit (prin intermediul unei cereri HTTP GET), (ii) o funcție de executat la finalizarea cu succes a operațiunii XHR și (iii) o listă arbitrară de argumente suplimentare care sunt transmise prin intermediul obiectului XHR (prin intermediul proprietății arguments
) către funcția de apelare a succesului.
Linia 1 declară o funcție invocată atunci când operațiunea XHR se finalizează cu succes. Aceasta, la rândul său, invocă funcția callback specificată în invocarea funcției loadFile
(în acest caz, funcția showMessage
) care a fost atribuită unei proprietăți a obiectului XHR (linia 11). Argumentele suplimentare (dacă există) furnizate la invocarea funcției loadFile sunt „aplicate” la rularea funcției de apelare.
Linia 5 declară o funcție invocată atunci când operația XHR nu reușește să se finalizeze cu succes.
Linia 11 stochează funcția de apelare a succesului dată ca al doilea argument pentru loadFile
în proprietatea callback
a obiectului XHR.
Linia 12 taie matricea de argumente dată la invocarea lui loadFile
. Începând cu al treilea argument, toate argumentele rămase sunt colectate, atribuite proprietății arguments a variabilei xhr
, transmise funcției de apelare a succesului xhrSuccess
. și, în cele din urmă, furnizate funcției de apelare (în acest caz, showMessage
) care este invocată de funcția xhrSuccess
.
Linia 15 specifică true pentru cel de-al treilea parametru al său pentru a indica faptul că cererea ar trebui să fie tratată în mod asincron.
Linia 16 inițiază efectiv cererea.
.