Dok responseText vraća HTTP odgovor kao string, responseXML vraća odgovor kao XML.
ResponseXML vraća objekat XML dokumenta, koji može da se ispita i analizira koristeći W3C DOM node tree metode i parametre.
AJAX ResponseXML primer
U sledećem AJAX primeru mi ćemo demonstrirati kako web stranica može da dobije podatke iz baze podataka koristeći AJAX tehnologiju. Selektovani podaci iz baze podataka će ovaj put biti konvertovani u XML dokument, a onda ćemo upotrebiti DOM kako bismo ekstrahovali vrednosti koje će biti prikazane. Korisnici će da vide sledeće:
Objašnjenje AJAX primera
Gornji primer sadrži HTML formu, nekoliko <span> elemenata koji će da drže vraćene podatke, i link ka JavaScript-u:
<html> <head> <script src="selectcustomer_xml.js"></script> </head> <body> <form action=""> Select a Customer: <select name="customers" onchange="showCustomer(this.value)"> <option value="ALFKI">Alfreds Futterkiste</option> <option value="NORTS ">North/South</option> <option value="WOLZA">Wolski Zajazd</option> </select> </form> <b><span id="companyname"></span></b><br /> <span id="contactname"></span><br /> <span id="address"></span> <span id="city"></span><br/> <span id="country"></span> </body> </html> |
Gornji primer sadrži HTML formu sa padajućim menijem koji se zove "customers".
Kada korisnik izabere kupca u padajućem meniju, izvršava se funkcija koja se zove "showCustomer()". Izvršavanje funkcije se pokreće od strane "onchange" događaja. Drugim rečima: Svaki put kada korisnik promeni vrednost u padajućem meniju, poziva sw funkcija showCustomer().
JavaScript kod je prikazan dole.
AJAX JavaScript
Ovo je JavaScript kod skladišten u fajlu "selectcustomer_xml.js":
var xmlHttp function showCustomer(str) { xmlHttp=GetXmlHttpObject(); if (xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } var url="getcustomer_xml.asp"; url=url+"?q="+str; url=url+"&sid="+Math.random(); xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET",url,true); xmlHttp.send(null); } function stateChanged() { if (xmlHttp.readyState==4) { var xmlDoc=xmlHttp.responseXML.documentElement; document.getElementById("companyname").innerHTML= xmlDoc.getElementsByTagName("compname")[0].childNodes[0].nodeValue; document.getElementById("contactname").innerHTML= xmlDoc.getElementsByTagName("contname")[0].childNodes[0].nodeValue; document.getElementById("address").innerHTML= xmlDoc.getElementsByTagName("address")[0].childNodes[0].nodeValue; document.getElementById("city").innerHTML= xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue; document.getElementById("country").innerHTML= xmlDoc.getElementsByTagName("country")[0].childNodes[0].nodeValue; } }
function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } |
Funkcije showCustomer() i GetXmlHttpObject() prikazane gore su iste kao u prethodnim člancima. Funkcija stateChanged() je takođe upotrebljena ranije u ovom uputsvu, međutim, ovaj put mi vraćamo rezultat kao XML dokument (sa responseXML-om) i koristimo DOM da bismo ekstrahovali vrednosti koje želimo da prikažemo.
AJAX Serverska stranica
Stranica servera koju poziva JavaScript je jednostavni ASP fajl koji se zove "getcustomer_xml.asp".
Stranica je napisana u VBScript-u za Internet Information Server (IIS). Ona lako može da se prepiše u PHP, ili neki drugi serverski jezik.
Kod pokreće SQL upit u bazi podataka i vraća rezultate kao XML dokument:
<% response.expires=-1 response.contenttype="text/xml" sql="SELECT * FROM CUSTOMERS " sql=sql & " WHERE CUSTOMERID='" & request.querystring("q") & "'"
on error resume next set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open(Server.Mappath("/db/northwind.mdb")) set rs=Server.CreateObject("ADODB.recordset") rs.Open sql, conn if err <> 0 then response.write(err.description) set rs=nothing set conn=nothing else response.write("<?xml version='1.0' encoding='ISO-8859-1'?>") response.write("<company>") response.write("<compname>" &rs.fields("companyname")& "</compname>") response.write("<contname>" &rs.fields("contactname")& "</contname>") response.write("<address>" &rs.fields("address")& "</address>") response.write("<city>" &rs.fields("city")& "</city>") response.write("<country>" &rs.fields("country")& "</country>") response.write("</company>") end if on error goto 0 %> |
Obratite pažnju na drugu liniju u ASP kodu gore: response.contenttype="text/xml". ContentType podešava tip HTTP sadržaja za objekat odgovora. Standardna vrednost za ovu karakteristiku je "text/html". Ovaj put mi želimo da tip sadržaja bude XML.
Zatim mi selektujemo podatke iz baze podataka, i gradimo XML dokument sa ovim podacima.