[求助]关于xmlhttp.onreadystatechange返回值的问题? xmlhttp.responseBody这个返回的是二进制数据.你想要什么??xmlhttp.responseTextxmlhttp.responseXML 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把 if(lrchtml==''){ readlrc2(specid,songid); } 放到onreadystatechange 的函数里因为你send之后再执行你的if,可能数据没有返回回来所以可能是空 //////////////////把 if(lrchtml==''){ readlrc2(specid,songid); } 放到onreadystatechange 的函数里 //////////////////这样还是没能改变全局变量lrchtml的值,我需要改变它的值,因为后面还有很多地址要用到这个变量的! 肯定是空的,你的函数在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); } 也许大家还没理解我的意思.....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); }alert(lrchtml); //为什么这里打印不出值????? 也许大家还没理解我的意思.....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); //为什么这里打印不出值????? 把这个 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之外可以取到他的值。 问题已解决非常感觉大家,特别感谢(hij333)! 把这个 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); 你把true改成false之后就是用同步的方式来发送请求了,还需要用ajax来处理么?默认是true,也就是异步的方式发送... Metro 布局排版 修改 jquery.pager.js 插件... 使彈出的窗口永远在所有窗口的最前面 eval的用法,不要网上搜索的结果 如何通过参数,动态设置属性? 请问用window.showModalDialog打开的窗口能不能再自动改变它的大小?如何实现? 一个页面中,上部分提交,变化,下部分不改变,如何实现呢? js Tab选项卡做内容页 请大家帮我看看这段代码,我实在是看不明白. 如何隐藏浏览器的地址栏、菜单栏、书签栏等浏览器组件 怎样实现逐个上传文件? 关于动态控制按钮的有效无效的小问题
readlrc2(specid,songid);
}
放到onreadystatechange 的函数里
因为你send之后再执行你的if,可能数据没有返回回来
所以可能是空
把 if(lrchtml==''){
readlrc2(specid,songid);
}
放到onreadystatechange 的函数里
//////////////////这样还是没能改变全局变量lrchtml的值,我需要改变它的值,因为后面还有很多地址要用到这个变量的!
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);
}
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);
}alert(lrchtml); //为什么这里打印不出值?????
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); //为什么这里打印不出值?????
改成异步的 xmlhttp.open("GET", "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc", false);
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之外可以取到他的值。
改成异步的 xmlhttp.open("GET", "aaa.asp?url=http://xxx.xxx.xxx.xxx:xxx/lrc/10566/1.lrc", false); 你把true改成false之后就是用同步的方式来发送请求了,还需要用ajax来处理么?
默认是true,也就是异步的方式发送...