Synchrone en asynchrone verzoeken
In sommige gevallen moet u veel externe bestanden lezen. Dit is een standaard functie die het XMLHttpRequest
object asynchroon gebruikt om de inhoud van het gelezen bestand naar een gespecificeerde luisteraar te sturen.
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);}
Gebruik:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
De handtekening van de utility-functie loadFile declareert (i) een doel-URL om te lezen (via een HTTP GET-verzoek), (ii) een functie om uit te voeren bij een succesvolle voltooiing van de XHR-bewerking, en (iii) een willekeurige lijst van extra argumenten die via het XHR-object (via de arguments
eigenschap) worden doorgegeven aan de succes-callback-functie.
Lijn 1 verklaart een functie die wordt aangeroepen wanneer de XHR-bewerking met succes is voltooid. Deze roept op zijn beurt de callback functie aan die is gespecificeerd in de aanroeping van de loadFile
functie (in dit geval, de functie showMessage
) die is toegewezen aan een eigenschap van het XHR object (lijn 11). De (eventuele) extra argumenten die bij de aanroep van de functie loadFile zijn meegegeven, worden “toegepast” op het uitvoeren van de callback-functie.
Lijn 5 verklaart een functie die wordt aangeroepen wanneer de XHR-bewerking niet met succes is voltooid.
Lijn 11 slaat de succes callback die is meegegeven als tweede argument voor loadFile
op in de callback
eigenschap van het XHR-object.
Lijn 12 snijdt de argumenten array die is meegegeven bij de aanroep van loadFile
. Beginnend met het derde argument, worden alle resterende argumenten verzameld, toegewezen aan de argumenten eigenschap van de variabele xhr
, doorgegeven aan de succes callback functie xhrSuccess
., en uiteindelijk geleverd aan de callback functie (in dit geval, showMessage
) die wordt aangeroepen door functie xhrSuccess
.
Lijn 15 specificeert true voor zijn derde parameter om aan te geven dat het verzoek asynchroon moet worden afgehandeld.
Lijn 16 initieert het verzoek.