Solicitudes síncronas y asíncronas
En algunos casos, hay que leer muchos archivos externos. Esta es una función estándar que utiliza el objeto XMLHttpRequest
de forma asíncrona para pasar el contenido del archivo leído a un oyente especificado.
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 de la función de utilidad loadFile declara (i) una URL de destino para leer (a través de una solicitud HTTP GET), (ii) una función para ejecutar en la finalización con éxito de la operación XHR, y (iii) una lista arbitraria de argumentos adicionales que se pasan a través del objeto XHR (a través de la propiedad arguments
) a la función de devolución de llamada de éxito.
La línea 1 declara una función invocada cuando la operación XHR se completa con éxito. Ésta, a su vez, invoca la función callback especificada en la invocación de la función loadFile
(en este caso, la función showMessage
) que ha sido asignada a una propiedad del objeto XHR (Línea 11). Los argumentos adicionales (si los hay) suministrados a la invocación de la función loadFile se «aplican» a la ejecución de la función callback.
La línea 5 declara una función invocada cuando la operación XHR no se completa con éxito.
La línea 11 almacena el callback de éxito dado como segundo argumento a loadFile
en la propiedad callback
del objeto XHR.
La línea 12 corta el array de argumentos dado a la invocación de loadFile
. Empezando por el tercer argumento, todos los argumentos restantes se recogen, se asignan a la propiedad arguments de la variable xhr
, se pasan a la función de devolución de llamada de éxito xhrSuccess
. y, en última instancia, se suministran a la función de devolución de llamada (en este caso, showMessage
) que es invocada por la función xhrSuccess
.
La línea 15 especifica true para su tercer parámetro para indicar que la solicitud debe ser manejada de forma asíncrona.
La línea 16 realmente inicia la solicitud.