日期:2014-05-16  浏览次数:20617 次

请教ajax一个奇怪的现像
//------------------ajax部分-----------------
var xmlHttp;
var errorflag=0;
function createXMLHttpRequest(){
if(window.ActiveXObject){
 xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest){
 xmlHttp= new XMLHttpRequest();
}
}

function sendRequest(url){
createXMLHttpRequest();
xmlHttp.onreadystatechange=callBack;
xmlHttp.open("Get", url, true);
xmlHttp.send(null);
}

function callBack(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
if(xmlHttp.responseText=="exist"){
errorflag=1;

}

}
}
}
//-------------------------------------

//检证新付款项的提交
function checkform(){
alert("send front = "+errorflag);  打印出来的是0
//未付款编号
var no = document.getElementById('paymentno').value;
//本次输入的未付款金额
var money = document.getElementById('paymoney').value;
sendRequest("http://localhost:8080/ContractSys/admin/payAddCheck.do?no="+no);
A处: alert("send after= "+errorflag);  打印出来的是0
if(errorflag==1){
  B处  alert("in if = "+errorflag);  打印出来的是1
errorflag=0;
alertPayno("对不起,您输入的付款号以经存在!");
return false;
}
//未付款总额
var unpaidAmount=<s:property value="unpaidAmount"/>;
//如果未付总额  减去   本次输入额  等于  正数或0则合法
var result=unpaidAmount-money;
if(result<0){
alert("您输入的付款金额有误!本次付款金额超出未付总额!");
return false;
}
return false;
}

------------------------------------------

请只看加粗的部分
有三个问题。
第一个问题:A处打印的是 0,为什么到了下一条语句就errorflag就突然变成1了呢。
第二个问题:ajax返回的是exist,那么应该改变了errorflag的值=1,但是方法出来后的errorflag还是0;

第三个问题:请教,ajax执行的顺序是怎么样的呢?还是我对ajax的执行过程理解有误。

------解决方案--------------------
ajax是异步的,不会挂起js代码执行,你增加alert语句挂起下面js代码执行,但是ajax还是会继续执行回调设置变量的值,你去掉A处的alert语句肯定不会执行b处的

xmlHttp.open("Get", url, true);
改为
xmlHttp.open("Get", url, false);同步执行