Synchronní a asynchronní požadavky
V některých případech je třeba načíst mnoho externích souborů. Jedná se o standardní funkci, která používá objekt XMLHttpRequest
asynchronně za účelem přepnutí obsahu čteného souboru do určeného posluchače.
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);}
Použití:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
Signatura obslužné funkce loadFile deklaruje (i) cílovou adresu URL pro čtení (prostřednictvím požadavku HTTP GET), (ii) funkci, která se provede po úspěšném dokončení operace XHR, a (iii) libovolný seznam dalších argumentů, které jsou předány prostřednictvím objektu XHR (prostřednictvím vlastnosti arguments
) zpětné funkci pro úspěch.
Řádek 1 deklaruje funkci vyvolanou po úspěšném dokončení operace XHR. Ta zase vyvolá funkci zpětného volání uvedenou ve volání funkce loadFile
(v tomto případě funkce showMessage
), která byla přiřazena vlastnosti objektu XHR (řádek 11). Dodatečné argumenty (pokud existují) uvedené ve volání funkce loadFile jsou „použity“ pro běh funkce zpětného volání.
Řádek 5 deklaruje funkci vyvolanou v případě, že operace XHR nebyla úspěšně dokončena.
Řádek 11 ukládá funkci zpětného volání pro úspěch uvedenou jako druhý argument funkce loadFile
do vlastnosti callback
objektu XHR.
Řádek 12 rozřezává pole argumentů uvedené ve volání funkce loadFile
. Počínaje třetím argumentem jsou všechny zbývající argumenty shromážděny, přiřazeny do vlastnosti arguments proměnné xhr
, předány funkci zpětného volání úspěchu xhrSuccess
. a nakonec dodány funkci zpětného volání (v tomto případě showMessage
), která je vyvolána funkcí xhrSuccess
.
Řádek 15 určuje pro svůj třetí parametr hodnotu true, aby naznačil, že požadavek má být zpracován asynchronně.
Řádek 16 skutečně iniciuje požadavek.
Řádek 17 určuje pro svůj třetí parametr hodnotu true, aby naznačil, že požadavek má být zpracován asynchronně.
Řádek 18 určuje, že požadavek má být zpracován asynchronně.