Javascript JSON.parse是一个“;未定义”;对象
我用php创建了json。数据来自ajax。但是JSON.parse给出了一个“未定义”的对象。为什么? Php代码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
$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我已经添加了解释