今天弄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;
}

解决方案 »

  1.   

    估计是你代码的问题还是仔细用firebug看看发送和返回的值是不是你需要的再不行就改改变量名试试
      

  2.   

    建议楼主随便选一个ajax框架吧...有好多呢.代码里面有没有console这个obj吧,有的话删除掉.
      

  3.   

    js的代码执行都是单线程的,ajax的回调函数是有延迟的。
    执行过程:
    ajax -> get url-> 成功 -> 如果在这个时候执行了alert(sqlDate)就是undefined -> 执行回调(给sqlDate赋值)->如果在这个时候执行了alert(sqlDate)就有值至于什么时候执行alert(sqlDate),js会根据线程空间是否空闲来决定的,你控制不了。
      

  4.   

    所以做ajax时,最好把回调后执行的代码统一写在一个函数里统一处理,
      

  5.   

    额,我最开始的时候都是写在一个函数里面的,但是,ajax能取到值。
    比如:将ajax取到得值保存到sqlDate里面,但是我在后面写一条arr = sqlDate.split("&&");
    arr里面的值为空,但是sqlDate里面的值是正确的可以分割的!!!这又是为什么???
      

  6.   

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

  7.   

    jquery是个什么东西,莫非又要我学习吗,问题就是我时间不多了,我想快点做完,但是问题就是出现在这里!!
      

  8.   

    去找篇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)
      {
        //由于代码过长,以下代码省略,以下代码无故障!!
      }
    }
      

  9.   

    唉!问题就是延迟怎么解决呢???
      我都写在一个函数里面,现在还是不能获取xmlHttp.responseText的值,最开始的时候还可以的只是不能分割!!
      

  10.   

    你就写个简单的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);
            }
        }
    }
      

  11.   

    xmlHttp.responseText有值,但是将其赋值给某个变量,那个变量没值
      

  12.   

    唉!!!算了,不将xmlHttp.responseText赋值给别的变量了!!!将就着用吧!!多谢各位的帮忙