[求助]关于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之外可以取到他的值。