史上最恶心的JS问题!!!标题要长!!!!!!!!!!!!

yuan1238 2009-08-25 11:40:32
今天弄JS碰到了这个超级恶心的问题,我用firfox的firedebug调试,看着值,一步步的走,问题解决,可是不用调试工具时,值就不见了,首先就是split分割,然后就是xmlHttp,后来干脆不用调试工具,使用最古老的方法:弹框框!!
首先在xmlHttp返回变量的那里放一个框框,显示变量,然后在使用变量的那里放个,也显示一下变量!!之后,令人惊奇的一幕出现了,第一个框框值为空,第二个框框值正确了,于是注释掉第二个框框,弹出一个空的框框,之后的操作就正常了,之后注释第一个框框,再次惊奇啊!!! 框框里面还是没值,并且之后的操作也出现了异常!!
这个问题真的太恶心了,一定要停一下才能获得值!!!真的不知道为什么!!!不知道各位朋友有没有遇到过相同的问题???如果遇到过,请说说你的解决方法!!!
下面贴代码!!

//检测预定信息输入数据合法性
function checkAddInfo()
{
//此处省略若干无故障代码!!
var getURL = "form_check.php?timeCheck=true&date="+sDate+"&room="+room;
sqlDate = checkDestineInfo(getURL);
if(sqlDate == "yes")
{
return true;
}
arrc = sqlDate.split("&&");
arrNum = arrc.length;
alert(sqlDate);//此处的框框为第二个!!
while(arrNum != 0)
{
//由于代码过长,以下代码省略,以下代码无故障!!
}
}

//预定冲突验证
function checkDestineInfo(getURL)
{
definXmlHttp();
var sqlDate = "";
if(xmlHttp != null)
{
xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState == 4){sqlDate = xmlHttp.responseText;}};
xmlHttp.open("GET", getURL ,true);
xmlHttp.send(null);
alert(sqlDate);//此处的框框为第一个
return sqlDate;
}
else
{
alert("连接错误");
}
return sqlDate;
}
...全文
226 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
额,我最开始的时候都是写在一个函数里面的,但是,ajax能取到值。
比如:将ajax取到得值保存到sqlDate里面,但是我在后面写一条arr = sqlDate.split("&&");
arr里面的值为空,但是sqlDate里面的值是正确的可以分割的!!!这又是为什么???
foolbirdflyfirst 2009-08-25
  • 打赏
  • 举报
回复
所以做ajax时,最好把回调后执行的代码统一写在一个函数里统一处理,
foolbirdflyfirst 2009-08-25
  • 打赏
  • 举报
回复
js的代码执行都是单线程的,ajax的回调函数是有延迟的。
执行过程:
ajax -> get url-> 成功 -> 如果在这个时候执行了alert(sqlDate)就是undefined -> 执行回调(给sqlDate赋值)->如果在这个时候执行了alert(sqlDate)就有值

至于什么时候执行alert(sqlDate),js会根据线程空间是否空闲来决定的,你控制不了。
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
调试的时候,值没有问题,如果不在取值的地方停顿一下,他就会出现取值不到的情况!!!
jlzan1314 2009-08-25
  • 打赏
  • 举报
回复
建议楼主随便选一个ajax框架吧...有好多呢.代码里面有没有console这个obj吧,有的话删除掉.
fenyao 2009-08-25
  • 打赏
  • 举报
回复
估计是你代码的问题

还是仔细用firebug看看发送和返回的值是不是你需要的

再不行就改改变量名试试


yuan1238 2009-08-25
  • 打赏
  • 举报
回复
啊啊,顶起!!
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
楼上的真//。。。。。。。
fenyao 2009-08-25
  • 打赏
  • 举报
回复
史上最恶心的沙发

hoho!
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
唉!!!算了,不将xmlHttp.responseText赋值给别的变量了!!!将就着用吧!!多谢各位的帮忙
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
xmlHttp.responseText有值,但是将其赋值给某个变量,那个变量没值
foolbirdflyfirst 2009-08-25
  • 打赏
  • 举报
回复
你就写个简单的ajax,会拿不到返回值xmlHttp.responseText?
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
var response = xmlHttp.responseText;
alert(response) //alert 一下
}else if (xmlHttp.status == 404){
alert("Page could not found ");
}else{
alert("Error: status code is " + xmlHttp.status);
}
}
}
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
啊啊啊啊,好痛苦啊,还没有解决啊!!!
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
唉!问题就是延迟怎么解决呢???
我都写在一个函数里面,现在还是不能获取xmlHttp.responseText的值,最开始的时候还可以的只是不能分割!!
foolbirdflyfirst 2009-08-25
  • 打赏
  • 举报
回复
去找篇js的运行机制了解下,比如http://www.phpweblog.net/rainman/archive/2009/01/05/6267.html这篇可以看看,ajax回调函数并不会立即执行,是有延迟的。
把处理统一放到回调函数是通用解决方式。
使不使用框架,也得对javascript有个基本认识,框架 is not everything.
参考:
function checkAddInfo()
{
//此处省略若干无故障代码!!
var getURL = "form_check.php?timeCheck=true&date="+sDate+"&room="+room;
checkDestineInfo(getURL);
}

//预定冲突验证
function checkDestineInfo(getURL)
{
definXmlHttp();
var sqlDate = "";
if(xmlHttp != null)
{
xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState == 4){handler(xmlHttp.responseText);}};
xmlHttp.open("GET", getURL ,true);
xmlHttp.send(null);
// alert(sqlDate);//此处的框框为第一个
// return sqlDate;
}
else
{
alert("连接错误");
}
//return sqlDate;
}

function handler(sqlDate){
if(sqlDate == "yes")
{
return true;
}
var arrc = sqlDate.split("&&");
var arrNum = arrc.length;
alert(sqlDate);//此处的框框为第二个!!
while(arrNum != 0)
{
//由于代码过长,以下代码省略,以下代码无故障!!
}
}
yuan1238 2009-08-25
  • 打赏
  • 举报
回复
jquery是个什么东西,莫非又要我学习吗,问题就是我时间不多了,我想快点做完,但是问题就是出现在这里!!
Abin-2008 2009-08-25
  • 打赏
  • 举报
回复
强烈推荐 jquery

有了 jquery 您再也不怕ajax了。
有了 jquery 您可以节省时间了。
有了 jquery 您就不会发最恶心的js了。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧