我正在尝试使用json_encode访问从我的PHP脚本返回的对象的属性,如下所示:

的PHP

echo json_encode(array(
  'person_id' => $personID,
  'job_id' => $jobID)
);


JS

$.ajax({
  url: url,
  cache: false,
  type: "POST"
}).done(function(sData){
  console.log(sData);
  console.log(sData.job_id);
  console.log(sData.person_id);
});


输出:

{"person_id":1,"job_id":1}
undefined
undefined


这里发生了什么?为什么我不能访问这些属性?

更新:

对于任何未来的访问者来说,这是我之前犯过很多次错误的原因(忽略了dataType),并且肯定会再次犯错。

由于您在Chrome Dev Tools中检查服务器响应时,它会自动解析为JSON对象(在PREVIEW选项卡中),因此尤其令人困惑。



Chrome可以很好地做到这一点,以便您可以轻松检查响应数据,但是对于JavaScript代码却并非如此,您将需要声明正确的响应dataType,以便您的代码可以将数据解释为一个对象而不是一个字符串。

最佳答案

$.ajax默认情况下不将响应评估为JSON。您必须通过dataType: 'json'

这应该做

$.ajax({
    url: url,
    cache: false,
    type: "POST",
    dataType: 'json'
}).done(function(sData){
        console.log(sData);
        console.log(sData.job_id);
        console.log(sData.person_id);
});

09-13 03:35