This is a simple usage example of Ajax that shows how to update a part of the HTML page without refreshing the page. This is a great GUI advantage which makes the application look more like a windows application rather then a web based client side application.
In a similar example I posted : http://www.weberdev.com/get_example-4413.html I showed how to do this with only one element in the page being updated. I was asked to show how this can be done with more than one element and this example shows how to use two. From here it's simple enough to go on to three and more.
The SELECT field triggers a call to UpdateDiv which does all of the work. UpdateDiv gets the parameter from the SELECT and passes it on so we can act upon it.
UpdateDiv Gets two parameters :
1. A URL for a Web Service that returns any kind of output based on the parameter we passed.
2. A name of a function that will be triggered when the data comes back. This function usually takes HTML output from the remote URL and populates the DIV we prepared with the HTML using innerHTML.
The data will be put in <DIV NAME="MyDiv" ID="MyDiv1"> and <DIV NAME="MyDiv" ID="MyDiv2"> that we can locate wherever we like.
In the previous example we only had the UpdateDiv function. Here we need two functions to do two different updates. In this example we have UpdateDiv1 and UpdateDiv2
The second function we need to duplicate is the GetResponse which now shows as GetResponse1 and GetResponse2.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE></TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY onLoad="update();">
// Initialize XMLHttpObject
function CreateXmlHttpObject(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
var objXMLHttp = new XmlHttp();
function GetReadyState( ){
return this.objXmlHttp.readyState;
}
function GetResponseText( ){
return this.objXmlHttp.responseText;
}
// Function performs Get request to absolute url(strUrl)
// using XmlHttp object (asynchroni)
// Response returned into objResult element using innerHTML.
// When state of XmlHttp object is changed - objOnReadyStateChangeFunction called
function GetUrlContent( strUrl, objOnReadyStateChangeFunction ){
this.objXmlHttp.open(this.HttpMethod, strUrl, true);
this.objXmlHttp.setRequestHeader('Content-Type', 'text/xml; charset=UTF-8');
if(objOnReadyStateChangeFunction){
this.objXmlHttp.onreadystatechange=function(){
objOnReadyStateChangeFunction();
}
}
this.objXmlHttp.send(null)
}
//This function is called when we get the data back from the server.
function GetResponse1( ){
if (objXMLHttp.GetReadyState()==4) {
// save response in inner html of result object
var objMyDiv = document.getElementById( 'MyDiv1' );
objMyDiv.innerHTML = objXMLHttp.GetResponseText( );
}
}
//This function is called when we get the data back from the server.
function GetResponse2( ){
if (objXMLHttp.GetReadyState()==4) {
// save response in inner html of result object
var objMyDiv = document.getElementById( 'MyDiv2' );
objMyDiv.innerHTML = objXMLHttp.GetResponseText( );
}
}
function UpdateDiv1( FieldValue ){
if( FieldValue !='' ){
var objMyDiv = document.getElementById( 'MyDiv1' );
objMyDiv.innerHTML = 'Please wait, getting info from server for Div 1...';
objXMLHttp.GetUrlContent( 'http://www.weberdev.com/get_example-' + FieldValue + '.html' , GetResponse1 );
}
return;
}
function UpdateDiv2( FieldValue ){
if( FieldValue !='' ){
var objMyDiv = document.getElementById( 'MyDiv2' );
objMyDiv.innerHTML = 'Please wait, getting info from server for Div 2...';
objXMLHttp.GetUrlContent( 'http://www.weberdev.com/get_example-' + FieldValue + '.html' , GetResponse2 );
}
return;
}
</SCRIPT>