+ -
当前位置:首页 → 问答吧 → 主函数获取不了AJAX返回值 ,老是为 undefined

主函数获取不了AJAX返回值 ,老是为 undefined

时间:2011-12-09

来源:互联网

[code=JScript]
function   shenQ(){

var   checkJL=checkjianli();
                                alert(checkJL);     //这里的返回值老是为   undefined

if   (checkJL== "ok "){
window.shengqingjobtitle.innerHTML=SjobTitle;
document.getElementById( "ShengQingJobId ").value=SjobId;
}
else   if(checkJL== "no "){
window.shengqingjobtitle.innerHTML=SjobTitle;
document.getElementById( "shengqingjob ").value= "简历不完整,请修改简历 ";
document.getElementById( "shengqingjob ").disabled=true;
}
else{
alert( "发生意外,请联系管理员 ");
closeDiv();
}
}
}

function   checkjianli(){
var   xmlhttp;
try{
xmlhttp=new   XMLHttpRequest();
}
catch(e){
xmlhttp=new   ActiveXObject( "Microsoft.XMLHTTP ");
}
xmlhttp.onreadystatechange=function(){
if   (xmlhttp.readyState==4){
if   (xmlhttp.status==200){
var   data=xmlhttp.responseText;
alert(data);   //这里正确
return   data;
}
else{
alert( "失败,请联系管理员 ");
}
}
}
xmlhttp.open( "post ",   "checkjianli.asp ",   true);
xmlhttp.setRequestHeader( 'Content-type ', 'application/x-www-form-urlencoded ');
xmlhttp.send( "lx=1 ");
}

[/code]

作者: defent   发布时间: 2011-12-09

因为AJAX是异步的,就相当于多线程一样。
因此你要使用它返回的值,必须使其同步。
xmlhttp.open( "post ", "checkjianli.asp ", false); 
改成false使用同步方式就行了。

作者: im110   发布时间: 2011-12-09

引用 1 楼 im110 的回复:
因为AJAX是异步的,就相当于多线程一样。
因此你要使用它返回的值,必须使其同步。
xmlhttp.open( "post ", "checkjianli.asp ", false);
改成false使用同步方式就行了。

+1

作者: huangxw000   发布时间: 2011-12-09

引用 1 楼 im110 的回复:
因为AJAX是异步的,就相当于多线程一样。
因此你要使用它返回的值,必须使其同步。
xmlhttp.open( "post ", "checkjianli.asp ", false);
改成false使用同步方式就行了。

+2

作者: opentheoo   发布时间: 2011-12-09

alert(checkJL); //这里的返回值老是为 undefined 

if (checkJL== "ok "){ 
window.shengqingjobtitle.innerHTML=SjobTitle; 
document.getElementById( "ShengQingJobId ").value=SjobId; 

else if(checkJL== "no "){ 
window.shengqingjobtitle.innerHTML=SjobTitle; 
document.getElementById( "shengqingjob ").value= "简历不完整,请修改简历 "; 
document.getElementById( "shengqingjob ").disabled=true; 

else{ 
alert( "发生意外,请联系管理员 "); 
closeDiv(); 


 把这段代码移到if (xmlhttp.status==200){ 
var data=xmlhttp.responseText; 
alert(data); //这里正确 
return data; 

这里面去就可以了.也可以把这段代码写到一个方法里.在这里面去调用那个方法就行了.要得到异步调用的返回值,必须等响应回来之后才能进行处理.

作者: liupengxia   发布时间: 2011-12-09

使用同步调用也是种方案,但是因为网络或者其它原因,得到返回值的时间过长,页面就会出现卡死状况.而且ajax的核心就是异步调用.改成同步,这违背了原则.

作者: liupengxia   发布时间: 2011-12-09