For at brukeren skal kunne bruke en webside som benytter ajax trenger de en nettleser som støtter XMLHttpRequest objektet i javascript.
Nettlesere som støtter dette er Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, Opera 8+ og Netscape 7.
For å skjønne hvordan dette fungerer skal vi lage et enkelt skjema som bruker ajax til å oppdatere litt data.
Ulike nettlesere burker ulike metoder for å ta i bruk XMLHttpRequest objektet. Internet Explorer brukere ActiveXObject mens andre
nettlsere bruker det innebygde javascript-objektet XMLHttpRequest. For å bruke riktig metode til riktig nettleser kan man enten lage et javascript
som sjekker hvilken nettleser man bruker, eller man kan kjøre en try/catch. I eksempelet under bruker vi en try/catch i en funksjon som returnerer
riktig object som vi kan bruke videre.
function GetXmlHttp(){
var xmlHttp;
try{xmlHttp=new XMLHttpRequest();}
catch (e){
try{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){
try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch (e){
alert("Nettleseren din støtter ikke ajax");
xmlHttp=null;
}
}
}
return xmlHttp;
}
Dersom denne funksjonen returnerer null, så har ikke nettleseren støtte for ajax. Vi kan dermed forenkle scriptet som faktisk bruker ajax til
feks noe som dette:
function GetTimeByAjax(){
var xmlHttp = GetXmlHttp();
if (xmlHttp!=null)
{
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.getElementById("serverTime").innerText = xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.aspx",true);
xmlHttp.send(null);
}
}
Vi bruker noe som heter onreadystatechange og som holder informasjon om serverens respons. Hver gang serveren gir data fra seg
vil funksjonen kalles og vi kan sjekke hva slags respons det er. I eksempelet over venter vi på at responsen skal være 4 som betyr
The request is complete. De andre verdiene er: 0:The request is not initialized, 1:The request has been set up,
2:The request has been sent, 3:The request is in process.
I tillegg til litt javascript i et html-dokument trenger vi et serverside-script som kan gi oss dynamisk data. I dette eksempelet lager vi
en aspx-fil (Time.aspx) som skriver ut hva klokken er:
<%@ Page Language="C#" %>
<%
// Sørger for at siden ikke caches
Response.Expires = 0;
Response.ExpiresAbsolute = new DateTime(2007, 1, 1);
Response.AppendHeader("pragma", "no-cache");
Response.AppendHeader("cache-control", "private");
Response.CacheControl = "no-cache";
%>
<%=DateTime.Now.ToString() %>
Vi kan nå sette opp et komplett eksempel med ajax som henter riktig tid (uten å laste siden på nytt) hver gang vi klikker på en link.
<html>
<head>
<script type="text/javascript">
function GetXmlHttp(){
var xmlHttp;
try{xmlHttp=new XMLHttpRequest();}
catch (e){
try{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){
try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch (e){
alert("Nettleseren din støtter ikke ajax");
}
}
}
return xmlHttp;
}
function GetTime(){
var xmlHttp = GetXmlHttp();
if (xmlHttp!=null)
{
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.getElementById("serverTime").innerText = xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.aspx",true);
xmlHttp.send(null);
}
}
</script>
</head>
<body>
<div id="serverTime"></div><br />
<a href="javascript:GetTime();">Hent tid fra server</a>
</body>
</html>