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

[求助]关于xmlhttp.onreadystatechange返回值的问题?

var   xmlhttp;
var   lrchtml= ' ';

function   readlrc(specid,songid){

xmlhttp   =   getXMLHttpRequest();
        xmlhttp.open( "GET ",   "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc ",   true);    
      xmlhttp.onreadystatechange   =   function   fnRun(){
if((xmlhttp.readyState   ==   4)   &&   (xmlhttp.status   ==   200)){
lrchtml   =   gb2utf8(xmlhttp.responseBody);
[alert(lrchtml)这里打印有值]
}
}    
xmlhttp.setRequestHeader( "Content-Type ",   "application/x-www-form-urlencoded ");  
xmlhttp.send(null);

[alert(lrchtml)这里打印就没有值了,我不知道用什么办法可以给这个lrchtml全局变量赋值]

if(lrchtml== ' '){
readlrc2(specid,songid);
}

}


请高人指点一下吧!!!

------解决方案--------------------
把 if(lrchtml== ' '){
readlrc2(specid,songid);
}

放到onreadystatechange 的函数里
因为你send之后再执行你的if,可能数据没有返回回来
所以可能是空
------解决方案--------------------
肯定是空的,你的函数在Ajax中还没有返回lrchtml的值那
------解决方案--------------------
xmlhttp = getXMLHttpRequest();
xmlhttp.open( "GET ", "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc ", true);
xmlhttp.onreadystatechange = function fnRun(){
if((xmlhttp.readyState == 4) && (xmlhttp.status == 200)){
lrchtml = gb2utf8(xmlhttp.responseBody);
if(lrchtml== ' '){
readlrc2(specid,songid);
}
}
}
xmlhttp.setRequestHeader( "Content-Type ", "application/x-www-form-urlencoded ");
xmlhttp.send(null);



}
------解决方案--------------------
把这个 xmlhttp.open( "GET ", "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc ", true);
改成异步的

xmlhttp.open( "GET ", "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc ", false);

------解决方案--------------------
其实你没有明白我说的意思

var xmlhttp;
var lrchtml= ' '; //全局变量

function readlrc(){

xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP ");
xmlhttp.open( "GET ", "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc ", true);
xmlhttp.onreadystatechange = function fnRun(){
if((xmlhttp.readyState == 4) && (xmlhttp.status == 200)){
lrchtml = '我给它赋值了 '; //给全局变量赋值
alert(lrchtml); //能打印出值?????
}
}
xmlhttp.setRequestHeader( "Content-Type ", "application/x-www-form-urlencoded ");
xmlhttp.send(null);

}

readlrc(); //调用函数

alert(lrchtml); //为什么这里打印不出值?????


你调用了readlrc()函数
但是调用了readlrc函数并不等于你就调用了onreadystatechange = function fnRun() 函数
如果你没有调用fnRun函数,那么你的全局变量的值还是你初始的时候的值 " "
所以你可以这样试试
readlrc();
if((xmlhttp.readyState == 4) && (xmlhttp.status == 200)){
alert(lrchtml);
}else{
alert( "status not change ");
}

这样同样可以说明你想知道的问题
因为xmlhttp也是全局变量,他的值在你调用readlrc的时候变了
你在函数readlrc之外可以取到他的值。