一般的AJAX过程如下:
function getAjaxObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("您的浏览器不支持AJAX!");
return null;
}
}
}
return xmlHttp;
}
var xmlHttpT=getAjaxObject();
if(xmlHttpT==null){
alert("修改失败:您的浏览器不支持Ajax.");
return;
}
xmlHttpT.open("GET,"PersonInfo.do",true);
xmlHttpT.onreadystatechange=function(){
if(xmlHttpT.readyState==4){
//alert(xmlHttpT.responseText);
try{
var responseT=xmlHttpT.responseXML.documentElement;
var rowCountT=parseInt(responseT.getElementsByTagName("row-count")[0].childNodes[0].nodeValue);
if(rowCountT>0&&setNoText(in_inputNo,valueT)){
spanT.innerHTML=spanInputNo2Text(in_inputNo);
}
else
alert("修改失败:请求影响"+rowCountT+"行,修改编号为:"+in_inputNo+".");
}catch(e){
alert("修改失败:"+e);
return;
}
}
}
xmlHttpT.send(null);
但是如果您想要根据AJAX的onreadystatechange函数的返回值来执行后面的操作,该怎么办呢?
方法是这样:
1、把xmlHttpT.open("GET,"PersonInfo.do",true);的第三个参数即"是否异步传输"的选项改成false,即使用同步传输xmlHttpT.open("GET,"PersonInfo.do",false);,这样程序执行的流程就会变成"send(null)"之后的语句将在AJAX返回后继续执行,在此之前都将停留在"send(null)"。
2、将"xmlHttpT.onreadystatechange=function(){...}"一整块直接去掉,因为这个函数的返回值是不会给它的调用者返回。将这一整块去掉后,直接将其放在"send(null)"之后就可以了,因为"xmlHttpT.readyState==4"就表示AJAX已经得到后台的响应,这就相当于"同步执行AJAX"之后顺序执行。
如:
...
function initAdvancedAssignOneDiv(){
...
if(isAnonymousT)//匿名查询人员
xmlHttpT.open("GET","<%=response.encodeURL("root/PersonManage.do")%>"+"?code=8&"+condT+"&_1="+Math.random(),false);
else
xmlHttpT.open("GET","<%=response.encodeURL("root/PersonManage.do")%>"+"?code=0&"+condT+"&_1="+Math.random(),false);
xmlHttpT.send(null);
try{
var responseT=xmlHttpT.responseXML.documentElement;
var rowCountT=parseInt(responseT.getElementsByTagName("row-count")[0].childNodes[0].nodeValue);
if(rowCountT>=0){
var tbodyT=document.getElementById("tb_aao");
var v1=tbodyT.childNodes.length;
for(var i=0;i<v1;i++){
tbodyT.removeChild(tbodyT.childNodes[0]);
}
tbodyT.setAttribute("rowCount",rowCountT);
for(var i=0;i<rowCountT;i++){
rowT=document.createElement("tr");
rowT.setAttribute("onmousemove","mouseEventApplyAuthority(this,0);");
rowT.setAttribute("onmouseout","mouseEventApplyAuthority(this,1);");
rowT.setAttribute("onclick","mouseEventApplyAuthority(this,2);");
rowT.style.cursor=handCursorGeneral;
tdT=document.createElement("td");
var checkboxT=document.createElement("input");
checkboxT.setAttribute("type","checkbox");
checkboxT.setAttribute("name","cb_aao");
checkboxT.checked=true;
checkboxT.setAttribute("pcid",responseT.getElementsByTagName("pcid"+i)[0].childNodes[0].nodeValue);
tdT.appendChild(checkboxT);
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("dnam"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("mnam"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("grade"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("class"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("pid"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("pcid"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tdT=document.createElement("td");
tdT.innerHTML=responseT.getElementsByTagName("pnam"+i)[0].childNodes[0].nodeValue;
rowT.appendChild(tdT);
tbodyT.appendChild(rowT);
}
var rcmpT=document.getElementById("sRcmp_paa_au");
var rbldT=document.getElementById("sRbld_paa_au");
var rflrT=document.getElementById("sRflr_paa_au");
var rnoT=document.getElementById("sRno_paa_au");
document.getElementById("sRcmp_aao").innerHTML=rcmpT.options[rcmpT.selectedIndex].innerHTML;
document.getElementById("sRbld_aao").innerHTML=rbldT.options[rbldT.selectedIndex].innerHTML;
document.getElementById("sRflr_aao").innerHTML=rflrT.options[rflrT.selectedIndex].innerHTML;
document.getElementById("sRno_aao").innerHTML=rnoT.options[rnoT.selectedIndex].innerHTML;
var RoomManagerT=document.getElementById("iRoomManager_paa_au");
var PermanentAuthT=document.getElementById("iPermanentAuth_paa_au");
document.getElementById("iRoomManager_aao").checked=RoomManagerT.checked;
document.getElementById("iPermanentAuth_aao").checked=PermanentAuthT.checked;
document.getElementById("iAnonymous_aao").checked=document.getElementById("iAnonymousUser_paa_au").checked;
if(!PermanentAuthT.checked){//非永久授权
document.getElementById("sBda_aao").value=matchDate(document.getElementById("iBda_paa_au").value);
document.getElementById("sEda_aao").value=matchDate(document.getElementById("iEda_paa_au").value);
}
document.getElementById("sRowCount_aao").innerHTML=rowCountT;
return true;
}
else{
alert("授权失败:数据库操作失败.");
return false;
}
...
}
...
if(initAdvancedAssignOneDiv()){//initAdvancedAssignOneDiv()会根据AJAX的成功与否而返回一个是否初始化成功的值
coverAll();
document.getElementById("dAdvancedAssignOne").style.display="block";
}
...