Az XMLHttpRequest (XHR) egy API, ami böngészőkön belül elérhető olyan interpreteres nyelvben, mint például a JavaScript. Arra használható, hogy HTTP vagy HTTPS protokollon keresztül direkt küldjünk kéréseket egy webszerverhez, aztán majd annak a válaszát közvetlenül visszakapjuk például a kérő szkriptben.[1] Fejlesztői változatban minden fontosabb böngésző támogatja URI sémákat HTTP vagy HTTPS protokollon keresztül. A visszaküldött adat, amelyet a szervertől kapunk vissza lehet JSON,[2] XML,[3] HTML, vagy egyszerű szöveg.[4] A visszakapott adat közvetlenül használható arra, hogy a böngészőben az aktív weboldal tartalmát módosítsuk, az oldal újratöltése nélkül, az aktív oldalhoz tartozó DOM szerkesztésével. A visszakapott adat egyből kiértékelhető kliens oldalon lévő szkripttel, például a JSON formátumú válasz, ami nagyon egyszerűen átkonvertálható a kliens oldalon lévő szkript által használt adat objektummá. XMLHttpRequestnek nagyon fontos szerepe van az Ajax web fejlesztési technikában. Jelenleg több weboldal is használja ezt a fajta technikát, annak érdekében, hogy minél használhatóbbak illetve, minél gyorsabban letölthetőek legyenek az adott oldalak. Több neves weboldal is létezik már, amelyek felhasználják ezt a technológiát, pl.: Gmail, Google Maps, Facebook és sokan mások.

Története

szerkesztés

Az "XMLHttpRequest" objektumot eredetileg a Microsoft Outlook Web Access fejlesztői alkották meg Microsoft Exchange Server 2000-hez.[5] Az API-t "IXMLHTTPRequest"-nek nevezték el, és azt a koncepciót az MSXML második verziójában implementálták. Ezt a verziót 1999 márciusában a Internet Explorer 5.0-val adták ki. Engedélyezték a használatát az ActiveX-nek, amin belül IXMLHTTPRequest interfész az MSXML 'XMLHTTP wrapper-én keresztül volt használható.[6]

A Mozilla projekt is alkalmazta ezt az interfészt, amelyet "nsIXMLHttpRequest"-nek neveztek el, a Gecko böngésző motorban. Amennyire csak lehetett a Mozilla megvalósítása szorosan illeszkedett a Microsoft-éhoz.[7][8] A Mozilla elkészített egy wrapper-t, ami lehetőséget adott arra, hogy ezt az interfészt Javascipt-en keresztül is használni lehessen. Létrehoztak egy JavaScipt objektumot, XMLHttpRequest-et.[9] Az "XMLHttpRequest" objektum egy korai 0.6-os Gecko kiadásban már elérhető volt 2000. december 6-án,[10][11] de ez sem volt teljesen működőképes egészen a 2002. június 5-én kiadott 1.0-s Gecko kiadásig.[10][11] A XMLHttpRequest objektum de-facto szabvánnyá vált a többi fontosabb böngészőben, mint például a Safari 2004 februári 1.2-es kiadásában,[12] Konqueror, Opera 2005 áprilisi 8.0-s kiadásában,[13] és az iCab 2005 szeptemberi 3.0b352 kiadásában.[14]

2006. április 5-én Anne van Kesteren Opera Software-től és Dean Jackson W3C-től elkészítettek egy előzetes munka tervezetet a "XMLHttpRequest" objektumról, amit abban az éven World Wide Web konzorcium által publikálva lett.[15] Célja a program specifikus kódokat elfedő réteg mögé gyűjtése, annak érdekében, hogy a fejlesztőknek ne kelljen platform specifikus kódokat írni. 2009. november 19-én adták ki az utolsó munka tervezetet "XMLHttpRequest"-ről.[16][17]

A 2006 októberében kiadott Internet Explorer 7.0 volt az a kiadás, ahol a Microsoft a "XMLHttpRequest" objektum azonosítót hozzáadta a szkript nyelvéhez.

A böngésző független Javascipt könyvtárak megjelenésétől kezdve, ilyen például: jQuery, vagy a Prototype JavaScript Framework, a fejlesztők képesek használ a XMLHttpRequest funkcionalitását, anélkül, hogy közvetlenül az API szintjén kellene programozniuk. A prototípus támogatja az aszinkron kéréseket, aminek neve Ajax.Request. A jQuery egyfajta wrapper, ami biztosítja a hozzáférést a böngésző mélyebb szintű funkcióinak eléréséhez.[18] A jQuery objektumok reprezentálnak vagy egyfajta wrapper objektumot képeznek a már létező HTML elemkhez a kliens oldali DOM-ban. Minden objektum rendelkezik egy .load()paraméterrel, ami lehetővé teszi URI paraméterek fogadását, majd egy ilyen objektum fogadásánal elkészít hozzá egy XMLHttpRequest-et, az ebből visszakapott HTML-hez, elkészít jQuery objektumot.[19][20]

A W3C a XMLHttpRequest objektum első munka tervezetének publikálása óta, nyilvánosságra hozta már a "2. szintű XMLHttpRequest" -t is 2008. február 25-én.[21] A 2. szint bővebb kiterjesztése a XMLHttpRequest-nek, de jelenleg nem kizárólagosan, vagyis nem minden böngészőben érhető el. Ilyen bővítések például a folyamat események, támogatja az oldalak közötti lekérdezést, illetve a képes kezelni a bájt folyamot. 2011. augusztus 16-án adták ki a legfrissebb specifikációt a 2. szintű XMLHttpRequest-ről, ami még mindig tervezet státuszban van.[22] 2011. december 5-e óta a 2. szintű tervezet hozzá lett adva a XMLHttpRequest fő specifikációjához[23] és így nincs többé 1. és 2. verzió.

Internet Explorer 5, 5.5 és 6 verziók támogatása

szerkesztés

Az Internet Explorer 5. és 6. verziójának szkript nyelvében nincs definiálva a XMLHttpRequest objektum azonosító, mert akkor még nem volt szabvány, mikor azokat kiadták. Visszafelé kompatibilitással elérték hogy akkor is detektálható legyen, ha a XMLHttpRequest azonosító nem létezik.[24] Azok az oldalak, amik használnak XMLHttpRequest-et vagy XMLHTTP-t, kisebb implementásáli különbségekkel enyhítése miatt a XMLHttpRequest egy JavaScript wapper mögött található, vagy egy már létező keretrendszer mögött, ami hasonlóképp működik. Minden esetben a wrapper képes észlelni az aktuális implementáció képességeit és képes működni a követelményeknek megfelelően. Mióta a Microsoft nem támogatja a Windows XP-t az Internet Explorer 6-tal, azóta a JavaScript-be beágyazott XMLHttpRequest támogatva van. Erre példa a következő:

/*
   Provide the XMLHttpRequest constructor for Internet Explorer 5.x-6.x:
   Other browsers (including Internet Explorer 7.x-9.x) do not redefine
   XMLHttpRequest if it already exists.

   This example is based on findings at:
   http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
*/
if (typeof XMLHttpRequest == "undefined")
  XMLHttpRequest = function () {
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
      catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
      catch (e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); }
      catch (e) {}
    //Microsoft.XMLHTTP points to Msxml2.XMLHTTP and is redundant
    throw new Error("This browser does not support XMLHttpRequest.");
  };

További cikkek

szerkesztés
  1. XMLHttpRequest object explained by the W3C Working Draft. W3.org. (Hozzáférés: 2009. július 14.)
  2. Response entity body of XMLHttpRequest, W3C Editor's Draft. W3.org, 2012. február 6. (Hozzáférés: 2012. február 5.)
  3. The responseXML attribute of the XMLHttpRequest object explained by the W3C Working Draft. W3.org. (Hozzáférés: 2009. július 14.)
  4. The responseText attribute of the XMLHttpRequest object explained by the W3C Working Draft. W3.org. (Hozzáférés: 2009. július 14.)
  5. Article on the history of XMLHTTP by an original developer. Alexhopmann.com, 2007. január 31. [2007. június 23-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  6. Dutta, Sunava: Native XMLHTTPRequest object. IEBlog. Microsoft, 2006. január 23. (Hozzáférés: 2006. november 30.)
  7. Specification of the nsIXMLHttpRequest interface from the Mozilla Developer Center. Developer.mozilla.org, 2008. május 16. [2008. október 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  8. Specification of the nsIJSXMLHttpRequest interface from the Mozilla Developer Center. Developer.mozilla.org, 2009. május 3. [2008. november 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  9. Specification of the XMLHttpRequest object from the Mozilla Developer Center. Developer.mozilla.org, 2009. május 3. [2008. november 22-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  10. a b Version history for the Mozilla Application Suite. Mozilla.org. [2009. április 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  11. a b Downloadable, archived releases for the Mozilla browser. Archive.mozilla.org. (Hozzáférés: 2009. július 14.)
  12. Archived news from Mozillazine stating the release date of Safari 1.2. Weblogs.mozillazine.org. [2009. június 2-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  13. Press release stating the release date of Opera 8.0 from the Opera website. Opera.com, 2005. április 19. [2009. január 20-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  14. Soft-Info.org: Detailed browser information stating the release date of iCab 3.0b352 from. Soft-Info.com. [2011. július 25-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 14.)
  15. Specification of the XMLHttpRequest object from the Level 1 W3C Working Draft released on April 5th, 2006. W3.org. (Hozzáférés: 2009. július 14.)
  16. XMLHttpRequest W3C Working Draft 19 November 2009. W3.org. (Hozzáférés: 2009. december 17.)
  17. W3C Process Document, Section 7.4.2 Last Call Announcement. W3.org. (Hozzáférés: 2009. december 17.)
  18. Porteneuve, Christophe.szerk.: Daniel H Steinberg: 9, {{{title}}}. Raleigh, North Carolina: Pragmatic Bookshelf, 183. o. (2007). ISBN 1-934356-01-8. Hozzáférés ideje: 2010. április 24. 
  19. Chaffer, Jonathan, Karl Swedberg. Learning jQuery. Birmingham: Packt Publishing, 107. o. (2007). ISBN 978-1-84719-250-9. Hozzáférés ideje: 2010. április 24. 
  20. Chaffer, Jonathan, Karl Swedberg. jQuery Reference Guide. Birmingham: Packt Publishing, 156. o. (2007). ISBN 978-1-84719-381-0. Hozzáférés ideje: 2010. április 24. 
  21. Specification of the XMLHttpRequest object from the Level 2 W3C Working Draft released on February 25th, 2008. W3.org. (Hozzáférés: 2009. július 14.)
  22. XMLHttpRequest Level 2, W3C Working Draft (Latest Version). W3.org. (Hozzáférés: 2010. november 19.)
  23. XMLHttpRequest Editor's Draft 5 December 2011. w3.org. (Hozzáférés: 2011. december 5.)
  24. Ajax Reference (XMLHttpRequest object). JavaScript Kit, 2008. július 22. (Hozzáférés: 2009. július 14.)

Külső hivatkozások

szerkesztés
Az angol Wikikönyvekben
további információk találhatók
XMLHttpRequest témában.

Specifikációk

szerkesztés

Böngészők

szerkesztés