Synkroniset ja asynkroniset pyynnöt
Joskus sinun on luettava monia ulkoisia tiedostoja. Tämä on vakiotoiminto, joka käyttää XMLHttpRequest
-objektia asynkronisesti vaihtaakseen luetun tiedoston sisällön määritellylle kuuntelijalle.
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);}
Käyttö:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
Hyödykefunktion loadFile allekirjoituksessa ilmoitetaan (i) kohde-URL-osoite, joka luetaan (HTTP GET-pyynnön kautta), (ii) funktio, joka suoritetaan XHR-operaation onnistuessa ja (iii) mielivaltainen luettelo lisäargumenteista, jotka välitetään XHR-olion kautta (arguments
-ominaisuuden arguments
välityksellä) onnistumisen takaisinkutsufunktiolle.
Rivillä 1 ilmoitetaan funktio, joka kutsutaan, kun XHR-operaatio suoritetaan onnistuneesti loppuun. Se puolestaan kutsuu kutsufunktiota, joka on määritetty XHR-objektin ominaisuuteen (rivi 11) määritetyn loadFile
-funktion kutsussa (tässä tapauksessa funktio showMessage
). Funktio loadFile:n kutsuun annetut lisäargumentit (jos sellaisia on) ”sovelletaan” takaisinkutsufunktion suorittamiseen.
Rivillä 5 ilmoitetaan funktio, jota kutsutaan, kun XHR-operaatio epäonnistuu onnistuneesti.
Rivillä 11 tallennetaan onnistumisen takaisinkutsu (success callback), joka annettiin toisena argumenttina funktiolle loadFile
, XHR-olion callback
-ominaisuuteen.
Rivillä 12 viipaloidaan argumenttikenttä (arguments array), joka annettiin funktiota kutsuttaessa funktiota loadFile
. Kolmannesta argumentista alkaen kaikki loput argumentit kerätään, osoitetaan muuttujan xhr
argumentit-ominaisuuteen, siirretään onnistumisen takaisinkutsufunktiolle xhrSuccess
. ja lopulta toimitetaan takaisinkutsufunktiolle (tässä tapauksessa showMessage
), joka kutsutaan funktiolla xhrSuccess
.
Rivi 15 määrittää kolmanneksi parametrikseen true:n osoittaakseen, että pyyntöä tulisi käsitellä asynkronisesti.
Rivi 16 itse asiassa panee pyynnön alulle.