Week 5 - AJAX - Martha's COIN 78b
Exercise
Write a callback handler function like below that takes in a responseXML object. Extract the data using DOM or SAX and display into the data container.
RESULTS
CODES
Instantiation of XMLHttp Object Asynchronous XMLHttp Request Callback Handler Coss-Domain Restrictions
Cross-Browser Instantiation of XMLHttp Object
function getXMLHttp() {
try {
//IE7 & up, Firefox, Opera and Safari suppor native XMLHttp
if (ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
// IE5 & IE6
else if(ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e) {
//Browsers that do not support XMLHttp
return null;
}
}
Asynchronous XMLHttp Request and Callback
function XHRequest(url,procResp,cont,contentType)
{
var XMLHttp = getXMLHttp();
if(!XMLHttp) return false;
if(procResp)
{
XMLHttp.onreadystatechange = function()
{
if (XMLHttp.readyState==4)
{
var statusCode = -1, responseText = null;
try
{
statusCode = XMLHttp.status;
responseText = XMLHttp.responseText;
}
catch(ex) {}
procResp(responseText,statusCode);
XMLHttp.onreadystatechange = function() {};
}
}
}
if(content)
{
XMLHttp.open("POST",url,true);
var t = contentType || "application/x-www-form-urlencoded";
XMLHttp.setRequestHeader("Content-Type",t);
XMLHttp.send(content)
}
else
{
XMLHttp.open("GET",url,true);
XMLHttp.send(null);
}
return true;
}
Callback Handler Function Example
function displayResponseText(responseText,statusCode)
{
var s = "Unknown Error";
switch(statusCode)
{
case 200: s = responseText;
break;
case 404: s = "Not Found";
break;
case 500: s = "Internal Server Error";
break;
case 12029: s = "Cannot Connect";
break;
}
document.getElementById('data').innerHTML = s;
}
Cross-Domain Restrictions in Browsers
Use the following code for each XMLHttp request in Firefox:
if(mozilla)
{
/* allows cross-domain SMLHttpRequest per request when run locally in Mozilla
try
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")
}
catch(e)
{
alert("Permission UniversalBrowserRead denied.\nReason: "+e;
}
}