老师给写的ajax类,为什么当ajax接收返回值的时候还要用eval('('+requestInfo+')')??
php端是用json_encode($arr)。
json_encode()处理过数组的本来不就是JSON对象了吗?不可以直接用吗?还必须得用eval()函数处理一下?

解决方案 »

  1.   

    json_encode($arr)是PHP里面的用法,将$arr转成json串,如果想把其转成数组用decode来解析,而eval('('+requestInfo+')')是js里面处理JSON解析成数组的方式,否则一个json串,你要怎么用呢
      

  2.   

    原因是因为如果不处理的话
    json_encode的结果传递给js会被当做普通的字符串处理的,而不是json数组。
    所以不能直接使用。
      

  3.   

    用eval可以将json转为js对象,以方便使用!
      

  4.   

    对js 来说他只是一些字符.他怎么判断是json 还是啥格式...这个其实应该可以封装一下的.
      

  5.   

    简单来说,你要把json字符串和json对象区分开。这就和php中字符串和数组还有对象不是一种数据类型道理相同。
      

  6.   

    谢谢大家的答案!
    我现在还是有一个疑问,如果按你们说的JS只能把json_encode($arr)的返回值当成是一个JSON字符串,不能直接处理。但是我试了一下以下代码:
    <script>
        var test = {"a":1, "b":2};
        alert(test);           //返回的是Object Object
        alert(test.a);         //返回1
    </script>为什么JS就可以直接使用JSON字符串呢?
      

  7.   

    test是对象,好像是这样的吧,我对js也不是很了解,而且你也可以当数组用好像,alert(test['a']),你把js了解了就应该知道是怎么用了
      

  8.   

    json_encode 过去的就相当于字符串
    eval 变为json对象 
      

  9.   

    你ajax请求服务器端代码,返回的是字符串。
    就相当于你这里改成
     var test = '{"a":1, "b":2}';//字符串,这样你理解了吗?
    而不是
     var test = {"a":1, "b":2};//这个是javascript对象,不是字符串