【问题标题】:JSON.parse is an “undefined” object [duplicate]JSON.parse 是一个“未定义”的对象 [重复]
【发布时间】:2018-05-20 10:09:53
【问题描述】:

我用 php 创建了 json。 ajax 附带的数据。但是 JSON.parse 给出了一个“未定义”的对象。为什么?

PHP 代码

 $emparray = array();
 while($row =mysqli_fetch_assoc($result))
 {
     $emparray[] = $row;
 }

 echo json_encode($emparray);

Ajax 代码

   $.ajax({
        type: "GET",
        url: "http://localhost:8080/xxx.php/",
        success: function (msg, result, status, xhr) {
            var obj= JSON.parse(msg);
            alert(obj.name);// giving undefined
        },
        error: function (error) {
        }
    });

json

[{"name":"eng","a":"sdf"}]

【问题讨论】:

  • 因为你有一个数组,它在第一个索引中有一个对象。 obj[0].name
  • obj 是一个数组,尝试访问第一个元素。 obj[0].name
  • quit using alert() for troubleshooting.,改用console.log()
  • 如果某个答案解决了您的问题,请考虑接受该答案。以下是meta.stackexchange.com/questions/5234/… 然后返回此处并对勾号/复选标记执行相同操作直到它变为绿色的方法。这通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,可能想要发布(更多)答案。您将获得积分,并鼓励其他人帮助您。 欢迎来到 Stack!

标签: javascript php jquery json ajax


【解决方案1】:

从服务器获取数据的更好方法

$emparray = array();
 while($row =mysqli_fetch_assoc($result))
 {
     $emparray[] = $row;
 }

 echo json_encode(array("data"=>$emparray));

将所有json响应放在data的键上,然后在前端通过dataType定义服务器响应为JSON格式,然后无需通过JSON.parse()解析数据

msg.data.length 将为您提供从服务器接收到的数据是否为空的验证,这将防止 undefined 错误

 $.ajax({
        type: "GET",
        dataType: "JSON",
        url: "http://localhost:8080/xxx.php/",
        success: function (msg, result, status, xhr) {
            var obj= msg.data;
           if(msg.data.length){       
                  alert(msg.data[0].name);// wll give name at 0 index
              }
        },
        error: function (error) {
        }
    });

【讨论】:

  • 为什么这样更好? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
  • @JayBlanchard 我已经添加了解释
【解决方案2】:

您的 JSON 是一个数组,这意味着您必须在访问该属性之前指向该对象的索引。

这段代码应该可以工作:

console.log(obj[0].name); //Returns "eng"

如果你的 JSON 数组是这样的:

[{"name":"eng","a":"sdf"}, {"name":"esp", "a":"abc"}]

然后obj[1].name 将返回"esp"

【讨论】:

    【解决方案3】:

    你应该obj[0].name

    因为您正在访问数组第一个元素的name 属性。

    【讨论】:

      猜你喜欢
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多