function
sendRequest(url,params,HttpMethod)
...
{

if (!HttpMethod)...{
HttpMethod="POST";
}
//LEO TODO: can use this way for var req 's definition? if multi-request? seems ok, study futher
req=initXMLHTTPRequest();

if (req)...{
req.onreadystatechange=onReadyState;
req.open(HttpMethod,url,true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(params);
}
}


function
initXMLHTTPRequest()
...
{
var xRequest=null;

if (window.XMLHttpRequest)...{
xRequest=new XMLHttpRequest();

} else if (window.ActiveXObject)...{
xRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
return xRequest;
}



function
onReadyState()
...
{
var myForm = document.getElementById("GoalChartsForm");
var tablePanel = document.getElementById("tablePanel");
var ready=req.readyState;
var data=null;

if (ready==READY_STATE_COMPLETE)...{
data=req.responseText;
//alert(" client has get response: " + data);
//var insertLocation = tablePanel.rows.length-2;
var insertLocation = null;
var respDataType = getResponseDataType(data);

if(respDataType == "DataFaciltyPanel")...{
insertLocation = 3;
displayPanel(insertLocation,data);
}

else if(respDataType == "DataPhysicianPanel")...{
insertLocation = 4;
displayPanel(insertLocation,data);
}

else if( respDataType == "refreshAfterChangeRCatSelection" )...{
refreshAfterChangeRCatSelection(data);
}

else if( respDataType == "refreshAfterChangeUrgencySelection" )...{
refreshAfterChangeUrgencySelection(data);
}
disableInputs(false);
return;
}

else...{
disableInputs(true);
return;
}
}



function
refreshAfterChangeRCatSelection(data_)
...
{
var colContents = data_.split("@#"); // data_ sample : 003UrgencyValue@#000RgeionPanel@#004IfHavingFPTMeasurement UrgencyValue sample: 002*urgency1_001*urgency*2_
//(1) refresh urgency panel
var urgencies = colContents[0].substring(3).split("_");
updateSelection("chartUrgencySelection",urgencies);
//(2) refresh region panel; empty facility and physician panel ; judge FTP disabled
var firstMark = data_.indexOf("@#")+2;
data_ = data_.substring(firstMark);
refRegionAndDelFacPhy(data_);
}


function
refreshAfterChangeUrgencySelection (data_)
...
{
var colContents = data_.split("@#"); // data_ sample : 005return region panel new html text and FTP info@#000RgeionPanel@#004IfHavingFPTMeasurement UrgencyValue=002*urgency1_001*urgency*2_
//refresh region panel; empty facility and physician panel ; judge FTP disabled
var firstMark = data_.indexOf("@#")+2;
data_ = data_.substring(firstMark);
refRegionAndDelFacPhy(data_);
}


function
updateSelection(selectionId,options)
...
{// options example: 002*urgencu1,003*urgency2,
var selection = document.getElementById(selectionId);

for(var index=selection.options.length-1; index>=0; index--)...{
selection.remove(selection.options[index]);
}

for(var index=0; index<options.length; index++)...{

if(options[index] == null || options[index] == "")...{// split of javascript is different from java's split
continue;
}
var codeAndNames = options[index].split("*");
var opt = document.createElement("option");
opt.value = codeAndNames[0];
opt.text = codeAndNames[1];

try...{
selection.add(opt); // IE only
}

catch(ex)...{
selection.add(opt,null); //standards compliant
}
}
//only for test
var rcatSels = document.getElementById("chartReportCategorySelection");

if( rcatSels.options[rcatSels.selectedIndex].value == "16" )...{//"CABG"
var opt = document.createElement("option");
opt.value = "1";
opt.text = "Urgency I";
selection.add(opt); // IE only
}
selection.selectedIndex = 0;

if(selection.options.length <= 1)...{
selection.disabled = true;
}

else...{
selection.disabled = false;
}
}


function
refRegionAndDelFacPhy(data_)
...
{
var colContents_ = data_.split("@#"); // data_ sample: 000RgeionPanel@#004IfHavingFPTMeasurement
//(1)refresh region panel
var tablePanel = document.getElementById("tablePanel");
var panelContent = colContents_[0].substring(3);
var colContents = panelContent.split("*");
tablePanel.rows[2].cells[1].innerHTML=colContents[1];
//(2)empty facility panel (4) empty physician panel
tablePanel.rows[3].cells[0].innerHTML="<td/>";
tablePanel.rows[3].cells[1].innerHTML="<td/>";
tablePanel.rows[3].cells[2].innerHTML="<td/>";
tablePanel.rows[4].cells[0].innerHTML="<td/>";
tablePanel.rows[4].cells[1].innerHTML="<td/>";
tablePanel.rows[4].cells[2].innerHTML="<td/>";
//(3)refresh FTP checkbox's disabled

disableFtpCheckBox(colContents_[1].substring(3));
}
1_initially access into AccessGoalCharts.jpg

2_after choose one region, facility panel appear.jpg (ajax, XmlHttpRequest, call-back function onReadyState)

3_after choose one facility, Physician panel appear.jpg ( ajax, XmlHttpRequest, call-back function onReadyState())

4_after choose muliti-facility, physician panel disappear.jpg (ajax, XmlHttpRequest, onReadyState())

5_after choose multi-region, facility panel disappear.jpg (Ajax, XmlHttpRequest, call-back function onReadyState)

6_one sample before submit select.jpg

本来想传一个Flash到blog上来,却没有传成功,不然更有助于解说
利用Ajax快速动态部分刷新网页,避免了全部HTML的刷新