Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.parse是一个“;未定义”;对象_Javascript_Php_Jquery_Json_Ajax - Fatal编程技术网

Javascript JSON.parse是一个“;未定义”;对象

Javascript JSON.parse是一个“;未定义”;对象,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我用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://loc

我用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


您应该
obj[0]。名称


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

您应该
obj[0]。name


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

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

此代码应适用于:

console.log(obj[0].name); //Returns "eng"
如果您的JSON数组是这样的:

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

然后,
obj[1]。name
将返回
“esp”

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

此代码应适用于:

console.log(obj[0].name); //Returns "eng"
如果您的JSON数组是这样的:

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

然后,
obj[1]。name
将返回
“esp”

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

$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
将为您提供验证,以确定从服务器接收的数据是否为空,从而防止出现未定义的错误


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

$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
将为您提供验证,以确定从服务器接收的数据是否为空,从而防止出现未定义的错误


因为您的数组在第一个索引中有一个对象
obj[0]。name
obj是一个数组,请尝试访问第一个元素<代码> Obj[[ 0 ] ]。请使用<代码>控制台。()(代码)>代码>。如果答案解决了问题,请考虑接受答案。下面是如何返回此处并对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,并鼓励其他人帮助您。欢迎来到Stack!因为您的数组在第一个索引中有一个对象
obj[0]。name
obj是一个数组,请尝试访问第一个元素<代码> Obj[[ 0 ] ]。请使用<代码>控制台。()(代码)>代码>。如果答案解决了问题,请考虑接受答案。下面是如何返回此处并对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,并鼓励其他人帮助您。欢迎来到Stack!为什么这样更好?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。@JayBlanchard我补充了解释为什么这样做更好?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了SO的未来访客。@JayBlanchard我已经添加了解释