javascript - 为什么这些对象属性未定义?

标签 javascript php jquery ajax

我正在尝试使用 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

这是怎么回事?为什么我无法访问这些属性?

更新:

对于任何 future 的访问者,这是我之前犯过很多很多次的错误(遗漏了 dataType),并且肯定会再次犯下。

这可能特别令人困惑,因为当您在 Chrome 开发工具中检查服务器响应时,它会自动解析为 JSON 对象(在 PREVIEW 选项卡中)。

enter image description here

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);
});

关于javascript - 为什么这些对象属性未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24415734/

相关文章:

javascript - 预填充字段 - WordPress 平台上的 Freshdesk

javascript - 如何在 Knockout JS 中更改 View

在 .each 中设置 JavaScript/jQuery clearInterval

javascript - jquery 选择自定义属性未定义的 anchor

javascript - 如何使用 javascript 解析带有数组的外部 JSON 文件

php - 将 PHP 错误日志文件存储在脚本目录中,而无需在现有脚本中添加 PHP 代码

php - Ajax表单返回变量给php

php - 尝试通过超链接向其他框架发送 php 请求

jquery - 当字段处于焦点时,Mousetrap.bind 不起作用?

javascript - JavaScript 中的闭包