Richieste sincrone e asincrone
In alcuni casi, è necessario leggere molti file esterni. Questa è una funzione standard che utilizza l’oggetto XMLHttpRequest
in modo asincrono per passare il contenuto del file letto a un ascoltatore specificato.
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);}
Uso:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
La firma della funzione di utilità loadFile dichiara (i) un URL di destinazione da leggere (tramite una richiesta HTTP GET), (ii) una funzione da eseguire al completamento con successo dell’operazione XHR, e (iii) una lista arbitraria di argomenti aggiuntivi che vengono passati attraverso l’oggetto XHR (tramite la proprietà arguments
) alla funzione di callback di successo.
La linea 1 dichiara una funzione invocata quando l’operazione XHR si completa con successo. Essa, a sua volta, invoca la funzione di callback specificata nell’invocazione della funzione loadFile
(in questo caso, la funzione showMessage
) che è stata assegnata a una proprietà dell’oggetto XHR (riga 11). Gli eventuali argomenti aggiuntivi forniti all’invocazione della funzione loadFile sono “applicati” all’esecuzione della funzione di callback.
La linea 5 dichiara una funzione invocata quando l’operazione XHR non riesce a completarsi con successo.
La linea 11 memorizza il callback di successo dato come secondo argomento a loadFile
nella proprietà callback
dell’oggetto XHR.
La linea 12 taglia l’array di argomenti dato all’invocazione di loadFile
. A partire dal terzo argomento, tutti gli argomenti rimanenti sono raccolti, assegnati alla proprietà arguments della variabile xhr
, passati alla funzione di callback di successo xhrSuccess
, e infine forniti alla funzione di callback (in questo caso, showMessage
) che è invocata dalla funzione xhrSuccess
.
La linea 15 specifica true per il suo terzo parametro per indicare che la richiesta dovrebbe essere gestita in modo asincrono.
La linea 16 avvia effettivamente la richiesta.