XMLHttpRequest
XMLHttpRequest (XHR) je API dostupan za skriptne jezike kao što je JavaScript. Koristi se za slanje HTTP ili HTTPS zahteva direktno ka veb serveru i upućuje odgovore servera nazad ka skripti. Podaci mogu biti primljeni sa servera kao JSON, XML, HTML, ili tekst. Podaci dobijeni u odgovoru mogu se direktno preneti u DOM trenutno aktivnog dokumenta bez potrebe za učitavanjem nove internet stranice. Podaci dobijeni u odgovoru takodje mogu biti interpretirani od strane klijentski orijentisanih skriptnih jezika.

XMLHttpRequest ima bitnu ulogu u razvoju internet softvera korišćenjem Ajax tehnologija. Trenutno ga koriste mnoge internet stranice za implementaciju dinamičkih internet aplikacija. Neki od primera ovih aplikacija su džimejl, gugl mape, fejsbuk, i mnogi drugi.

XMLHttpRequest mora poštovati politiku, pravila brauzvera, zbog sigurnosnih razloga, zahtev će biti uspešan ako je potekao sa istog servera koji servira originalnu veb stranicu. Postoje alternativni načini da se ovo prevaziđe(izbegne).

Istorija i podrška 

Koncept XMLHttpRequest objekta je originalno kreiran od programera iz Outlook Web Access (iz Microsoft) za Microsoft Exchange Server 2000. Interfejs zvan IXMLHTTPRequest je razvijen i implementiran u drugoj verziji MSXML biblioteke koristeci ovaj koncept. Druga verzija MSXML biblioteke je isporučena sa Internet Explorer 5.0 u Martu 1999 godine, ActiveX je omogućavao pristup IXMLHTTPRequest interfejsu koristeći XMLHTTP omotač-wrapper MSXML biblioteke.

Mozila projekat razvio je i implementirao interfejs pod nazivom nslXMLHttpRequest u Gecko motornom rasporedu. Ovaj interfejs rađen je po uzoru na Microsoft-ov IXMLHTTPRequest koliko god je to bilo moguće.. Mozila je kreirala omotač za korišćenje ovog interfejsa preko JavaScript objekta koji se naziva XMLHttpRequest. XMLHttpRequest objekat bio je dostupan kada je Gecko verzija 0.6 objavljena 6.decembra 2000. Godine , ali nije bio potpuno funkcionalan. Tek verzija 1.0 Gekoo objavljena 5.juna 2002. XMLHttpRequest objekat postao je de fakto standard kod drugih velikih veb klijenata realizovan u Safari 1.2, objavljen u februaru 2004.godine Konqueror, Opera 8.0 objavljena u aprilu 2005 i iCab 3.0b352 objavljena u septembru 2005.godine.

[W3C|World Wide Web Consortium objavio je nacrt specifikacije za XMLHttpRequest objekat 5. Aprila 2006. Izmenjen od strane Anne van Kesteran za Opera Software i Dean Jackson of W3C. Njen cilj bio je "da se dokumentuje skup minimalnih iteroperabilnih funkcija zasnovan na postojećim implementacijama, što omogućava Veb programerima da koriste ove funkcije bez platforme-specifičnog koda." Poslednja revizija specifikacije XMLHttpRequest objekta bila je 19. Novembra 2009, kao poslednji radni nacrt.

Microsoft je dodao XMLHttpRequest objekat identifikator svojim skriptama u Internet Explorer 7.0 objavljnom u oktobru 2006.

Sa pojavom cross-browsera JavaScript biblioteka kao što je jQuery i Prototype JavaScript Framework, programeri mogu da pozovu XMLHttpRequest bez kodiranja direktno na API. Prototip je omogućio asinhroni objekat tražilac koji se naziva Ajax. Zahtev koji pokriva osnovnu implementaciju pregledača obezbeđujući pristup do njega. jQuery objekti predstavljaju ili wrapuju elemente iz trenutne klijentske strane DOM. Svi oni imaju .load() Metod koji uzima URI parametar i pravi XMLHttpRequest ka URI-ju, onda postavimo na bilo koja mesta vraćeni HTML u HTML element koji predstavlja jQuery objekat.

W3C je objavio još jedan od nacrta specifikacije za XMLHttpRequest objekat. „XMLHttpRequest Level 2“ 25. 2. 2008.godine. Nivo 2 se sastoji od proširene funkcionalnosti za XMLHttpRequest objekat, uključujući, ali ne ograničavajući, napredak, podrška za cross-site request i rešavanje bajt sistema. Najnovija revizija XMLHttpRequest Level2 specifikacije je od 16.avgusta 2011, koja je i dalje u upotrebi.

XMLHttpRequest verzije 2 spojen je u glavnu XMLHttpRequest specifikaciju i ne postoji više verzija 1 i verzija 2.

Podrška u verzijama 5, 5.5 i 6 Internet Explorer-a 
U verzijama 5 i 6 Internet Explorer-a nije definisan indetifikator za XMLHttpRequest objekat u okviru njihovog skript jezika s obzirom da XMLHttpRequest indetifikator nije bio standard u vreme njihovog predstavljanja. Kompatibilnost unazad može biti postignuta korišćenjem detekcije objekata ukoliko XmlHttpRequest indetifikator ne postoji.

Veb stranice koje koriste XMLHttpRequest mogu ublažiti trenutne manje razlike u impementaciji bilo obmotavanjem XMLHttpRequest objekta JavaScript omotačem, bilo korišćenjem postojećeg okvira(framework) koji to radi. U bilo kojem slučaju, omotač bi trebao da detektuje the abilities trenutne implementacije i radi u okviru njenih zahteva.

Microsoft će podžavati Windows XP a samim tim i Internet Explorer 6 do 8 April 2014. Primer obmotavanja u JavaScript-u prikazan je ispod.

/*
   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.");
  };
}

Drugi način za postavljanje XMLHttpRequest za sve pregledače 

function getXMLHttpRequestObject() {
    var ref = null;
    if (window.XMLHttpRequest) {
        ref = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // Older IE.
        ref = new ActiveXObject("MSXML2.XMLHTTP.3.0");
    }
    return ref;
}

HTTP zahtev 

Ova sekcija demonstrira kako funkcioniše zahtev korišćenjem XMLHttpRequest objekt u okviru korisničkih agenata baziranih na W3C nacrtu.

Metod open 

HTTP i HTTPS zahtev XMLHttpRequest objekta mora biti inicijalizovan kroz open method. Ovaj metod mora biti pozvan pre slanja samog zahteva kako bi potvrdio i rešio zahtev. Ovaj metod ne garantuje postojanje URL adrese ili tačnost poslatih podataka. Ovaj metod moze imati najvise pet parametera, ali sam zahtev moze imati najvise dva za inicijalizaciju samog zahteva.

 open(Method, URL, Asynchronous, UserName, Password )

Prvi parametar metoda je text string koji označava koji HTTP zahtev se koristi. Zahtevi koji moraju biti podržani od strane usaglašenih user agent, definisani od strane W3C nacrta za XMLHttpRequest objekte, su:
 GET (Podržan od strane Internet Explorer 7 (i novije verzije), Mozilla 1+)
 POST (Podržan od strane Internet Explorer 7 (i novije verzije), Mozilla 1 (i novije verzije))
HEAD (Podržan od strane Internet Explorer 7 (i novije verzije))
 PUT
 DELETE
 OPTIONS (Podržan od strane Internet Explorer 7 (i novije verzije))
Ipak, zahtevi nisu ograničeni samo na gore navedene. Po W3C nacrtu internet pregledači mogu da podržavaju dodatne zahteve.

Drugi parametar metoda je takodje text string, ovaj parametar označava URL HTTP zahteva. Preporuka W3C-a je da internet pregledači treba da prijave grešku i ne dozvole zahtev u slučaju da URL ima drugačiji port od ili ihost URI komponentu nego trenutni dokument.
Treći parametar je boolean vrednost koja označava da li će zahtev biti asinhron, i nije obavezan po W3C nacrtu. Moze se pretpostaviti da je podrazumevana vrednost ovog parametra tačno(true), za korisničke agente usaglašene sa W3C nacrtom, ako on nije naveden. Asinhroni zahtev(vrednost true) neće čekati odgovor servera, već će skripta nastaviti sa izvršavanjem. Sinhroni zahtev(vrednost false) će blokirati izvršavanje trenutne skripte sve dok zahtev ne bude završen.

Četvrti i peti parametak su korisnočko ime i šifra. Ovi parametri mogu biti poslati za autentikaciju i autorizaciju.

setRequestHeader metod 

Nakon uspešne inicijalizacije zahteva, moze biti pozvan setRequestHeader metod XMLHttpRequest objekta za slanje HTTP hedera zajedno sa zahtevom.

 setRequestHeader(Name, Value )

Prvi parametar je tipa string i predstavlja ime hedera. Drugi parametar je takodje tipa string i predstavlja vrednost. Ovaj metod mora biti pozvan za svaki heder koji se mora poslati sa zahtevom.

send metod 

Za slanje HTTP zahteva mora biti pozvan send metod XmlHttpRequest objekta. Ovaj metod ima samo jedan parametar, sadržinu koja se šalje sa zahtevom.

 send (Data )

Ovaj parametar može biti izostavljen ako se nikakva sadržina ne treba poslati. Po W3C nacrtu ovaj parametar može biti bilo kog tipa koji se može konvertovati u string, a da je podržan od strane skript jezika. Ako korisnički agent ne može da obradi ovaj parametar onda on treba biti ignorisan.

Ukoliko je parametar DOM objekat korisnički agent treba da osigura da je objekat konvertovan u dobro formiran XML.

onreadystatechange osluškivač događaja 
Ako je open metod XMLHttpRequest objekta pozvan sa trecim parametrom true za asihroni zahtev, onreadystatechange osluškivač događaja će automatski biti pozvan za sve akcije koje menjaju readyState svojstvo XMLHttpRequest objekta.

Promene stanja funkcionišu na sledeći način:

 Nakon što je uspešno pozvan open metod, readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost 1.
 Nakon sto je pozvan send metod i dobijen odgovor u vidu HTTP zaglavlja, readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost 2.
 Kada sadržina HTTP odgovora počne da se učitava, readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost 3.
 Nakon što je sadržina HTTP odgovora učitana, readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost 4.

Osluškivač reaguje samo na promene stanja koje su se desile nakon što je osluškivač definisan. Kako bi detektovao stanja 1 i 2, osluškivač mora biti definisan pre nego sto je pozvan metod open. Metod open mora biti pozvan pre metoda send.

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState === 4){
        alert(xmlhttp.readyState);
    }
};
xmlhttp.open('GET', 'somepage.xml', true);
xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // Tells server that this call is made for ajax purposes.
                                                                 // Most libraries like jQuery/Prototype/Dojo do this
xmlhttp.send(null); // No data need to send along with the request.

abort metod 
Ovaj metod prekida zahtev ako readyState XMLHttpRequest objekta nije jos postao 4.abort metod obezbeđuje da se prekine očekivanje odgovora u asinhronom zahtevu.

 abort()

Neke AJAX biblioteke koriste abort metod za prekidanje potecijalnih duplikata ili loših zahteva.

HTTP odgovor 

Nakon uspešnog i završenog poziva send metoda, ako je server vratio validan XML i ako je Content-Type header vraćen od strane servera prepoznat kao Internet media type za XML od strane korisničkog agenta, responseXML svojstvo XMLHttpRequest objekta će sadžati DOM objekat. Drugo svojstvo, responseText će sadržati odgovor servera kao tekst.

Cross-domain zahtev 
U početku razvoja World Wide Web, otkivena je da je moguće narušiti privatnost korisnika ukoliko se koristi JavaScript za razmenu informacija izmedju dve Veb stranice. Zbog toga svi moderni Veb pregledači implementiraju same origin policy kako bi sprečili većinu takvih napada, kao što je cross-site scripting. XMLHttpRequest podaci su deo ove sigurnosne politike, ali ponekad programeri žele da namerno zaobidju ograničenja. To se ponekad radi zbog omogućavanja poddomena. Na primer, slanje XmlHttpRequest zahteva sa stranice koja se nalazi na foo.example.com kako bi se dobile informacija sa bar.example.com ne bi uspelo ako se ne bi zaobišla neka ograničenja.

Postoji nekoliko alternativa za zaobilaženje ovih sigurnosnih svojstava, uključijući korišćenje JSONP, Cross-Origin Resource Sharing ili plaginova kao sto su Flash ili Silverlight. XMLHttpRequest Level 2 takodje uključuje svojstvo za komunikaciju sa drugim domenima.

Pogledajte još: 
 WebSocket
 Hypertext Transfer Protocol (HTTP)
 Ajax

Reference

Literatura

Specifikacija 
 XMLHttpRequest (level 1) specification from W3C (abandoned Candidate Recommendation)
 XMLHttpRequest level 2 specification from W3C (Working Draft)
 Cross-Origin Resource Sharing
 Progress Events 1.0

Browsers - Pregledači 
 MSDN Library
 Specification of the XMLHttpRequest object for Microsoft developers
 XDomainRequest
 Specification of the XMLHttpRequest object for Mozilla developers
 Specification of the XMLHttpRequest object for Opera developers

Ostalo 
 New Tricks in XMLHttpRequest2, online tutorial by Eric Bidelman (Developer Relations, Google)
 "Attacking AJAX Applications" , a presentation given at the Black Hat security conference. Discusses several issues involving XHR and the future of cross-domain Ajax.
  Support end of Windows XP

XML
HTTP
Ајакс (програмирање)
ЈаваСкрипт
XMLHttpRequest ( XHR ) je API dostupan za skriptne jezike kao što je JavaScript . Koristi se za slanje HTTP ili HTTPS zahteva direktno ka veb serveru i upućuje odgovore servera nazad ka skripti . Podaci mogu biti primljeni sa servera kao JSON , XML , HTML , ili tekst . Podaci dobijeni u odgovoru mogu se direktno preneti u DOM trenutno aktivnog dokumenta bez potrebe za učitavanjem nove internet stranice . Podaci dobijeni u odgovoru takodje mogu biti interpretirani od strane klijentski orijentisanih skriptnih jezika . XMLHttpRequest ima bitnu ulogu u razvoju internet softvera korišćenjem Ajax tehnologija . Trenutno ga koriste mnoge internet stranice za implementaciju dinamičkih internet aplikacija . Neki od primera ovih aplikacija su džimejl , gugl mape , fejsbuk , i mnogi drugi . XMLHttpRequest mora poštovati politiku , pravila brauzvera , zbog sigurnosnih razloga , zahtev će biti uspešan ako je potekao sa istog servera koji servira originalnu veb stranicu . Postoje alternativni načini da se ovo prevaziđe( izbegne ) . Istorija i podrška Koncept XMLHttpRequest objekta je originalno kreiran od programera iz Outlook Web Access ( iz Microsoft ) za Microsoft Exchange Server Interfejs zvan IXMLHTTPRequest je razvijen i implementiran u drugoj verziji MSXML biblioteke koristeci ovaj koncept . Druga verzija MSXML biblioteke je isporučena sa Internet Explorer0 u Martugodine , ActiveX je omogućavao pristup IXMLHTTPRequest interfejsu koristeći XMLHTTP omotač-wrapper MSXML biblioteke . Mozila projekat razvio je i implementirao interfejs pod nazivom nslXMLHttpRequest u Gecko motornom rasporedu . Ovaj interfejs rađen je po uzoru na Microsoft-ov IXMLHTTPRequest koliko god je to bilo moguće .. Mozila je kreirala omotač za korišćenje ovog interfejsa preko JavaScript objekta koji se naziva XMLHttpRequest . XMLHttpRequest objekat bio je dostupan kada je Gecko verzija6 objavljenadecembra Godine , ali nije bio potpuno funkcionalan . Tek verzija0 Gekoo objavljenajuna XMLHttpRequest objekat postao je de fakto standard kod drugih velikih veb klijenata realizovan u Safari2 , objavljen u februarugodine Konqueror , Opera0 objavljena u aprilui iCab0b352 objavljena u septembrugodine. [ W3C|World Wide Web Consortium objavio je nacrt specifikacije za XMLHttpRequest objekat Aprila Izmenjen od strane Anne van Kesteran za Opera Software i Dean Jackson of W3C . Njen cilj bio je " da se dokumentuje skup minimalnih iteroperabilnih funkcija zasnovan na postojećim implementacijama , što omogućava Veb programerima da koriste ove funkcije bez platforme-specifičnog koda . " Poslednja revizija specifikacije XMLHttpRequest objekta bila je Novembra kao poslednji radni nacrt . Microsoft je dodao XMLHttpRequest objekat identifikator svojim skriptama u Internet Explorer0 objavljnom u oktobru Sa pojavom cross-browsera JavaScript biblioteka kao što je jQuery i Prototype JavaScript Framework , programeri mogu da pozovu XMLHttpRequest bez kodiranja direktno na API . Prototip je omogućio asinhroni objekat tražilac koji se naziva Ajax . Zahtev koji pokriva osnovnu implementaciju pregledača obezbeđujući pristup do njega. jQuery objekti predstavljaju ili wrapuju elemente iz trenutne klijentske strane DOM . Svi oni imaju \ .load ( ) Metod koji uzima URI parametar i pravi XMLHttpRequest ka URI-ju , onda postavimo na bilo koja mesta vraćeni HTML u HTML element koji predstavlja jQuery objekat. W3C je objavio još jedan od nacrta specifikacije za XMLHttpRequest objekat. „ XMLHttpRequest Levelgodine . Nivose sastoji od proširene funkcionalnosti za XMLHttpRequest objekat , uključujući , ali ne ograničavajući , napredak , podrška za cross-site request i rešavanje bajt sistema . Najnovija revizija XMLHttpRequest Level2 specifikacije je odavgusta koja je i dalje u upotrebi . XMLHttpRequest verzijespojen je u glavnu XMLHttpRequest specifikaciju i ne postoji više verzijai verzija Podrška u verzijama5 iInternet Explorer-a U verzijamaiInternet Explorer-a nije definisan indetifikator za XMLHttpRequest objekat u okviru njihovog skript jezika s obzirom da XMLHttpRequest indetifikator nije bio standard u vreme njihovog predstavljanja . Kompatibilnost unazad može biti postignuta korišćenjem detekcije objekata ukoliko XmlHttpRequest indetifikator ne postoji . Veb stranice koje koriste XMLHttpRequest mogu ublažiti trenutne manje razlike u impementaciji bilo obmotavanjem XMLHttpRequest objekta JavaScript omotačem , bilo korišćenjem postojećeg okvira( framework ) koji to radi . U bilo kojem slučaju , omotač bi trebao da detektuje the abilities trenutne implementacije i radi u okviru njenih zahteva . Microsoft će podžavati Windows XP a samim tim i Internet ExplorerdoApril Primer obmotavanja u JavaScript-u prikazan je ispod . / * Provide the XMLHttpRequest constructor for Internet Explorerx-6.x : Other browsers ( including Internet Explorerx-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 . " ) ; } ; } Drugi način za postavljanje XMLHttpRequest za sve pregledače function getXMLHttpRequestObject ( ) { var ref = null ; if ( window.XMLHttpRequest ) { ref = new XMLHttpRequest ( ) ; } else if ( window.ActiveXObject ) { / / Older IE. ref = new ActiveXObject( " MSXML2.XMLHTTP .3.0 " ) ; } return ref ; } HTTP zahtev Ova sekcija demonstrira kako funkcioniše zahtev korišćenjem XMLHttpRequest objekt u okviru korisničkih agenata baziranih na W3C nacrtu . Metod open HTTP i HTTPS zahtev XMLHttpRequest objekta mora biti inicijalizovan kroz open method . Ovaj metod mora biti pozvan pre slanja samog zahteva kako bi potvrdio i rešio zahtev . Ovaj metod ne garantuje postojanje URL adrese ili tačnost poslatih podataka . Ovaj metod moze imati najvise pet parametera , ali sam zahtev moze imati najvise dva za inicijalizaciju samog zahteva. open( Method , URL , Asynchronous , UserName , Password ) Prvi parametar metoda je text string koji označava koji HTTP zahtev se koristi . Zahtevi koji moraju biti podržani od strane usaglašenih user agent , definisani od strane W3C nacrta za XMLHttpRequest objekte , su : GET ( Podržan od strane Internet Explorer( i novije verzije ) , Mozilla ) POST ( Podržan od strane Internet Explorer( i novije verzije ) , Mozilla( i novije verzije ) ) HEAD ( Podržan od strane Internet Explorer( i novije verzije ) ) PUT DELETE OPTIONS ( Podržan od strane Internet Explorer( i novije verzije ) ) Ipak , zahtevi nisu ograničeni samo na gore navedene . Po W3C nacrtu internet pregledači mogu da podržavaju dodatne zahteve . Drugi parametar metoda je takodje text string , ovaj parametar označava URL HTTP zahteva . Preporuka W3C-a je da internet pregledači treba da prijave grešku i ne dozvole zahtev u slučaju da URL ima drugačiji port od ili ihost URI komponentu nego trenutni dokument . Treći parametar je boolean vrednost koja označava da li će zahtev biti asinhron , i nije obavezan po W3C nacrtu . Moze se pretpostaviti da je podrazumevana vrednost ovog parametra tačno( true ) , za korisničke agente usaglašene sa W3C nacrtom , ako on nije naveden . Asinhroni zahtev( vrednost true ) neće čekati odgovor servera , već će skripta nastaviti sa izvršavanjem . Sinhroni zahtev( vrednost false ) će blokirati izvršavanje trenutne skripte sve dok zahtev ne bude završen . Četvrti i peti parametak su korisnočko ime i šifra . Ovi parametri mogu biti poslati za autentikaciju i autorizaciju. setRequestHeader metod Nakon uspešne inicijalizacije zahteva , moze biti pozvan setRequestHeader metod XMLHttpRequest objekta za slanje HTTP hedera zajedno sa zahtevom. setRequestHeader( Name , Value ) Prvi parametar je tipa string i predstavlja ime hedera . Drugi parametar je takodje tipa string i predstavlja vrednost . Ovaj metod mora biti pozvan za svaki heder koji se mora poslati sa zahtevom. send metod Za slanje HTTP zahteva mora biti pozvan send metod XmlHttpRequest objekta . Ovaj metod ima samo jedan parametar , sadržinu koja se šalje sa zahtevom. send ( Data ) Ovaj parametar može biti izostavljen ako se nikakva sadržina ne treba poslati . Po W3C nacrtu ovaj parametar može biti bilo kog tipa koji se može konvertovati u string , a da je podržan od strane skript jezika . Ako korisnički agent ne može da obradi ovaj parametar onda on treba biti ignorisan . Ukoliko je parametar DOM objekat korisnički agent treba da osigura da je objekat konvertovan u dobro formiran XML. onreadystatechange osluškivač događaja Ako je open metod XMLHttpRequest objekta pozvan sa trecim parametrom true za asihroni zahtev , onreadystatechange osluškivač događaja će automatski biti pozvan za sve akcije koje menjaju readyState svojstvo XMLHttpRequest objekta . Promene stanja funkcionišu na sledeći način : Nakon što je uspešno pozvan open metod , readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost Nakon sto je pozvan send metod i dobijen odgovor u vidu HTTP zaglavlja , readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost Kada sadržina HTTP odgovora počne da se učitava , readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost Nakon što je sadržina HTTP odgovora učitana , readyState svojstvo XMLHttpRequest objekta trebalo bi da dobije vrednost Osluškivač reaguje samo na promene stanja koje su se desile nakon što je osluškivač definisan . Kako bi detektovao stanjai osluškivač mora biti definisan pre nego sto je pozvan metod open . Metod open mora biti pozvan pre metoda send. xmlhttp.onreadystatechange = function ( ) { if ( xmlhttp.readyState === alert( xmlhttp.readyState ) ; } } ; xmlhttp.open ( ' GET ' , ' somepage.xml ' , true ) ; xmlhttp.setRequestHeader ( 'X-Requested-With ' , ' XMLHttpRequest ' ) ; / / Tells server that this call is made for ajax purposes . / / Most libraries like jQuery / Prototype / Dojo do this xmlhttp.send ( null ) ; / / No data need to send along with the request. abort metod Ovaj metod prekida zahtev ako readyState XMLHttpRequest objekta nije jos postaoabort metod obezbeđuje da se prekine očekivanje odgovora u asinhronom zahtevu. abort ( ) Neke AJAX biblioteke koriste abort metod za prekidanje potecijalnih duplikata ili loših zahteva . HTTP odgovor Nakon uspešnog i završenog poziva send metoda , ako je server vratio validan XML i ako je Content-Type header vraćen od strane servera prepoznat kao Internet media type za XML od strane korisničkog agenta , responseXML svojstvo XMLHttpRequest objekta će sadžati DOM objekat . Drugo svojstvo , responseText će sadržati odgovor servera kao tekst . Cross-domain zahtev U početku razvoja World Wide Web , otkivena je da je moguće narušiti privatnost korisnika ukoliko se koristi JavaScript za razmenu informacija izmedju dve Veb stranice . Zbog toga svi moderni Veb pregledači implementiraju same origin policy kako bi sprečili većinu takvih napada , kao što je cross-site scripting . XMLHttpRequest podaci su deo ove sigurnosne politike , ali ponekad programeri žele da namerno zaobidju ograničenja . To se ponekad radi zbog omogućavanja poddomena . Na primer , slanje XmlHttpRequest zahteva sa stranice koja se nalazi na foo.example.com kako bi se dobile informacija sa bar.example.com ne bi uspelo ako se ne bi zaobišla neka ograničenja . Postoji nekoliko alternativa za zaobilaženje ovih sigurnosnih svojstava , uključijući korišćenje JSONP , Cross-Origin Resource Sharing ili plaginova kao sto su Flash ili Silverlight . XMLHttpRequest Leveltakodje uključuje svojstvo za komunikaciju sa drugim domenima . Pogledajte još : WebSocket Hypertext Transfer Protocol ( HTTP ) Ajax Reference Literatura Specifikacija XMLHttpRequest ( levelspecification from W3C ( abandoned Candidate Recommendation ) XMLHttpRequest levelspecification from W3C ( Working Draft ) Cross-Origin Resource Sharing Progress Events0 Browsers - Pregledači MSDN Library Specification of the XMLHttpRequest object for Microsoft developers XDomainRequest Specification of the XMLHttpRequest object for Mozilla developers Specification of the XMLHttpRequest object for Opera developers Ostalo New Tricks in XMLHttpRequest2 , online tutorial by Eric Bidelman ( Developer Relations , Google ) " Attacking AJAX Applications " , a presentation given at the Black Hat security conference . Discusses several issues involving XHR and the future of cross-domain Ajax . Support end of Windows XP XML HTTP Ајакс ( програмирање ) ЈаваСкрипт