• ajax获取json数据为undefined--原因解析


      问题:

            1. 碰到一个问题ajax成功获取json数据后,取值显示undefined,通过eval函数转一次即可成功获取json数据值,如果不通过,可以参考如下转两次;

            2.表单保存后,重新ajax请求数据又报Uncaught SyntaxError:错误,经过分析原来是表单保存后ajax返回的数据竟然是json数据Object类型,故不需要eval()函数转对象;所以直接加入以下判断

                是字符串才eval(): 

                

     $.ajax({
               url: "company/credit/infoB",
               type: "POST",
               data:{company:a,contractObject:b,receivables:c},
               dataType: 'JSON',
               success: function(result){
                   var obj;
                  //判断是否是json格式
                  if((typeof result=='object')&&result.constructor==Object){
                      obj=result;
                  }else{
                      obj  = eval("("+result+")");
                  }
    

      

         一般处理服务器传来的json值时,我们都会用两种方式进行处理:1.一种为使用eval()函数。var dataObj=eval("("+data+")");//转换为json对象(注:data为json数据);2. 使用Function对象来进行返回解析。var json =(new Function("","return "+data))();

           但是今天做项目(项目用struts2)时用这两种方法进行json读取,输出时一直是undefined。上网查了许多资料,大多都说不明白,后来查到一篇文章作者也遇到这种情况,他解决的办法是在action中将返回值声明json属性,在自己的项目上测试后不通过,后来解决的办法是再转一次。以下是自己的思考:从后台传来的数据虽然声明为json属性,但是传到前台时其实还是一个字符串,不是一个json对象,这时候我们需要对后台的数据进行处理,转化为json对象,然后获取json中的值。但是有时候后台传来的值不一定是标准的json格式的字符串,虽然我们通过前面的两种方法之一转化后台传来的对象,但是这时候转化的json对象实际上还是一个字符串,是一个标准的json字符串,我们再一次转换后就成了一个json对象。

          以下是部分代码:

               result = JSONObject.fromObject(map).toString();//后台代码,将map转成json对象

               success : function(result) {//前台返回值代码
    var obj = eval("("+result+")");
    //var data1 =(new Function("","return "+obj))();
    var data1=eval("("+obj+")");
    alert(data1.name);

               }

    参考链接:http://www.cnblogs.com/myjavawork/archive/2011/03/10/1979279.html

                     http://blog.csdn.net/mengjian93/article/details/41921427

  • 相关阅读:
    WebSocket
    CORS跨域请求
    Flask基础应用
    Python之人工智能(一)
    Linux(CentOS7)安装Nginx(附简单配置)
    SpringBoot异步调用--@Async详解
    Java8遍历Map、Map转List、List转Map
    Linux修改系统时间为东八区北京时间(上海时间)
    Docker 安装并部署Tomcat、Mysql8、Redis
    Mysql8.0新特性【详细版本】
  • 原文地址:https://www.cnblogs.com/Nico-luo/p/7927322.html
Copyright © 2020-2023  润新知