BACK

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

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;
    }
}