neděle 24. června 2007

Jak by měl vypadat XMLHttpRequest 2

Před pěti dny oznámil Anne van Kesteren vydání working draftu specifikace pro XHR (XMLHttpRequest).

XHR není obsažen v HTML5, byť by tam logicky patřil, pravděpodobně proto, že jeho specifikace začala pod křídly pracovní skupiny pro Web API. Jelikož řada členů Web API WG je zároveň členy WHATWG a HTML WG, není se třeba bát nekonzistencí.

Připravovaná specifikace XHR nepřináší v zásadě nic nového, jejím cílem je hlavně specifikovat XHR tak, jak byl na základě prvotní specifikace Microsoftu implementován webovými prohlížeči a zajistit společný jmenovatel, který bude v každém prohlížeči implementován stejně.

A protože se v zásadě jedná o specifikaci relativně starou (četli jste historii XHR začínající u Outlook Web Access od Alexa Hopmanna?), která neměla ani tušení, jaký boom AJAXu jednou nastane, Anne se zamýšlí, jak by mohl vypadat takový XMLHttpRequest 2. Tedy XMLHttpRequest vyvinutý dle dnešních potřeb.

Srovnejme stávající XHR a Annův návrh XHR2:
// XMLHttpRequest today

function handler() {
if (this.readyState == 4 && this.status == 200)
// so far so good
else if (this.readyState == 4 && this.status != 200)
// fetched the wrong page or network error...
}

var r = new XMLHttpRequest();
r.open("GET", uri);
r.onreadystatechange = handler;
r.send();

//////////////////////////////////////////
// XMLHttpRequest 2

// start "script block"
var r = new XMLHttpRequest(uri);
// uri argument causes implicit invocation
// of r.open("GET", uri)
r.onload = function() { … }
r.onerror = function() { … }
r.onabort = function() { … }
// end "script block" causes implicit invocation
// of r.send()

Anne vkládá URL přímo do konstruktoru, čímž říká, že se má použít XHR2 včetně závěrečného automatického zavolání send() nakonci. A odděluje obsloužení úspěšného a neúspěšného volání (to je již nyní v některých prohlížečích implementováno, ale nebude součástí specifikace XHR1). Ve výsledku je zapotřebí méně kódu a obsluha událostí je strukturovaná.

Pod Anneho příspěvkem se rozpoutala zajímavá diskuse. Terčem kritiky je zejména automatické volání metody send(). Pokud je programování AJAXu vaším denním chlebem a máte nápad, jak XHR vylepšit, napište Annemu do komentářů své připomínky.

BTW všimli jste si, že každá specifikace, kterou Anne píše, má v patičce
Please, keep bugging us with your issues!

Žádné komentáře:

Okomentovat

Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.