一般的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";
   }

...

相关文章:

  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
  • 2021-10-13
猜你喜欢
  • 2021-04-10
  • 2022-12-23
  • 2021-11-05
  • 2021-11-05
  • 2021-10-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案