我尝试过这段代码。但它没有用。我只需要返回bool值的状态。但总是会返回true
。
function nic_is_exist(){
var state = true;
var nic = document.getElementById("tbNic").value;
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState == 1){
document.getElementById("spNic").innerHTML="<img src='../Style/images/loarding.gif' />";
}
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("spNic").innerHTML="";
var str = xmlhttp.responseText;
alert(str+2);
if( str != "1"){
alert("if");
fill_form(str);
checkNull();
state = true;
}else{
alert("else");
state = false;
}
}
}
xmlhttp.open("POST","rpoRegister_PHP.php?a="+nic,true);
xmlhttp.send();
return state;
}
答案 0 :(得分:0)
你的ajax请求运行异步所以在你的ajax请求完成你的函数之前返回你的state
变量值true
在初始化期间
你应该将你需要做的任何事情都转移到函数本身。
基本上有两种解决方法:
使AJAX调用同步(让我们称之为SJAX)。
使用回调重构代码以使其正常工作。
答案 1 :(得分:0)
AJAX是异步的。如果您需要根据TRUE / FALSE执行某些操作,则需要将其放在if (xmlhttp.readyState==4 && xmlhttp.status==200)
块中。或者使用函数调用替换state = true;
和state = false;
代码。
示例:
if( str != "1"){
alert("if");
fill_form(str);
checkNull();
doSuccessCode();
}else{
alert("else");
doFailCode();
}
答案 2 :(得分:0)
取决于您如何从rpoRegister_PHP.php回显responseText 你在比较它们之前尝试使用.trim()吗?这可能是一个额外的空间。
var str = xmlhttp.responseText.trim();
alert(str+2);
if( str != "1"){
alert("if");
fill_form(str);
checkNull();
state = true;
}else{
alert("else");
state = false;
}