Szinkron és aszinkron kérések
Egyes esetekben sok külső fájlt kell beolvasni. Ez egy szabványos függvény, amely a XMLHttpRequest
objektumot aszinkron módon használja, hogy az olvasott fájl tartalmát egy megadott hallgatóra kapcsolja.
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);}
Használat:
function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");
A loadFile segédfüggvény aláírása deklarálja (i) az olvasandó cél URL-címet (HTTP GET-kérésen keresztül), (ii) az XHR művelet sikeres befejezésekor végrehajtandó függvényt, és (iii) a további argumentumok tetszőleges listáját, amelyeket az XHR objektumon keresztül (a arguments
tulajdonságon keresztül) a siker visszahívó függvénynek ad át.
Az 1. sor deklarálja az XHR művelet sikeres befejezésekor meghívott függvényt. Ez viszont meghívja a loadFile
függvény meghívásában megadott visszahívási függvényt (ebben az esetben a showMessage
függvényt), amelyet az XHR objektum egyik tulajdonságához rendeltünk (11. sor). A loadFile függvény meghívásához megadott további argumentumok (ha vannak) “alkalmazásra kerülnek” a callback függvény futtatásához.
Az 5. sor deklarálja azt a függvényt, amelyet akkor hívunk meg, ha az XHR művelet nem sikerül sikeresen befejezni.
A 11. sor az XHR objektum callback
tulajdonságában tárolja a loadFile
második argumentumaként megadott sikeres callback-et.
A 12. sor a loadFile
meghívásához megadott argumentumtömböt szeleteli. A harmadik argumentummal kezdve az összes többi argumentumot összegyűjti, hozzárendeli a xhr
változó arguments tulajdonságához, átadja a xhrSuccess
. siker visszahívási függvénynek, és végül a xhrSuccess
függvény által meghívott visszahívási függvénynek (ebben az esetben a showMessage
) adja meg.
A 15. sor a harmadik paramétereként true-t ad meg annak jelzésére, hogy a kérést aszinkron módon kell kezelni.
A 16. sor ténylegesen elindítja a kérést.