我异步获取到了responseText的内容,我想定义一个全局变量var GLO=responseText来保存获取到的内容,结果失败了,我想是不是因为responseText所在的函数结束了那么responseText对象也就没了。
如果我想将异步获取的内容用JS变量保存起来该怎么做呢?

解决方案 »

  1.   

    是这样定义吗?var glo; //在函数外面
    glo=responseText;  //赋值
    可是我没取到值啊
      

  2.   

    LZ的问题是全局变量的范围
    var cc = '';  //整个js范围内的全局变量
    function aa(){
        var dd = '';//本函数体内的局部变量,相对于下边ajax function的全局变量 
        ajax('',function(o){
          dd = o.responseText; //可改用全局变量cc存之,函数体外就可以访问得到了
        })
    }
      

  3.   

    我当然知道全局变量了,但就是只能在函数里面ALERT出收到的字符,在函数外面ALERT就什么都没有
      

  4.   

    大家还是看看我的代码吧var str='';//全局变量
     
    var xmlhttp; 
    function loadXMLDoc(url)
    {
    xmlhttp=null;
    if (window.XMLHttpRequest)
      {// code for all new browsers
      xmlhttp=new XMLHttpRequest();
      }
    else if (window.ActiveXObject)
      {// code for IE5 and IE6
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    if (xmlhttp!=null)
      {
      xmlhttp.onreadystatechange=state_Change;
      xmlhttp.open("POST",url,true);
      xmlhttp.send(null);
      }
    }function state_Change()
    {
    if (xmlhttp.readyState==4)
      {
      if (xmlhttp.status==200)
        {
       
        str=xmlhttp.responseText;
        alert(str);//函数里面alert能看到内容 
     }
    }
    alert(str);//函数外面alert什么也没有
      

  5.   

    str=xmlhttp.responseText;
      alert(str);//函数里面alert能看到内容    str1
     }
    }
    alert(str);//函数外面alert什么也没有      str2
    你的str2在str1之前执行的话,并没有赋值给str,所以str2打印出的值是空在执行ajax后值成功赋予了str,在此之后使用的话就是你所需要的值了
      

  6.   

    window.str=xmlhttp.responseText;alert(window.str)这样试试。
      

  7.   

    是异步问题  在赋值前  你alert了 当然为空了 看7楼
      

  8.   

    在声明一个方法
    function show(){
    alert(str);
    }然后调用这个方法
      

  9.   

    如果是异步问题应该会先弹出空值再弹出获得的值。
    你给window.str="aaa"一个初始值。
    然后再alert(window.str)有没有改变试一下。window.str肯定是全局的了。
      

  10.   


    如果你的程序真是像你发出来的这段
    其实是先执行最后面那句alert,那个时候还没调用state_Change(),自然就是默认的 str='' 啦
    然后才到异步赋值
      

  11.   

    lz,你只有在str=xmlhttp.responseText;这一步完成之后你的str才会有值的你在str=xmlhttp.responseText;这一步之前调用str都是空值的你写个函数在str=xmlhttp.responseText;之后你再调用下,打印出来的str就有值啦~
      

  12.   

    这就是异步的问题 ajax的执行和你的alert相当于两个进程 他们不是“串行”的 而是“并行”的  
      

  13.   

    多么明显的异步啊,上面的都回答了。建议你 再添加一个按钮,给这个按钮注册个点击事件,然后alert(那个值);
    在这就可以看到结果了。
      

  14.   

    异步的问题,上面有人回答很清楚了,function state_Change()
    {
    if (xmlhttp.readyState==4)
      {
      if (xmlhttp.status==200)
      {
     
    str=xmlhttp.responseText;
      alert(str);//函数里面alert能看到内容 
     }

    alert('这加一个alert看看会弹出几次');
    }