Requisições síncronas e assíncronas
Em alguns casos, você deve ler muitos arquivos externos. Esta é uma função padrão que usa o objeto XMLHttpRequest
assíncrono para mudar o conteúdo do arquivo lido para um ouvinte 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);}
Usage:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
A assinatura da função utilitário loadFile declara (i) uma URL de destino a ler (via uma requisição HTTP GET), (ii) uma função a executar após a conclusão bem sucedida da operação XHR, e (iii) uma lista arbitrária de argumentos adicionais que são passados através do objeto XHR (via a propriedade arguments
) para a função callback de sucesso.
Linha 1 declara uma função invocada quando a operação do XHR é concluída com sucesso. Ela, por sua vez, invoca a função callback especificada na invocação da função loadFile
(neste caso, a função showMessage
) que foi atribuída a uma propriedade do objeto XHR (Linha 11). Os argumentos adicionais (se houver) fornecidos para a invocação da função loadFile são “aplicados” à execução da função callback.
Linha 5 declara uma função invocada quando a operação do XHR falha em completar com sucesso.
Linha 11 armazena o callback de sucesso dado como segundo argumento para loadFile
no objeto XHR callback
propriedade.
Linha 12 corta o array de argumentos dado para a invocação de loadFile
. A partir do terceiro argumento, todos os argumentos restantes são recolhidos, atribuídos à propriedade argumentos da variável xhr
, passados à função de retorno de chamada de sucesso xhrSuccess
, e finalmente fornecidos à função de retorno de chamada (neste caso, showMessage
) que é invocada pela função xhrSuccess
.
Linha 15 especifica verdadeiro para o seu terceiro parâmetro para indicar que a requisição deve ser tratada assincronamente.
Linha 16 realmente inicia a requisição.