我尝试使用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开发工具中检查服务器响应时,它会自动解析为JSON对象(在PREVIEW选项卡中)。
Chrome执行此操作很不错,因此您可以轻松检查您的响应数据,但是对于您的javascript代码也是如此,您需要声明响应的正确dataType
这样您的代码就可以将数据解释为对象而不是字符串。
答案 0 :(得分:4)
$.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);
});
答案 1 :(得分:1)
PHP返回一个字符串值。必须将此值解析为javascript对象。试试这个:
$.ajax({
url: url,
cache: false,
type: "POST"
}).done(function(sData){
sData = JSON.parse(sData);
console.log(sData);
console.log(sData.job_id);
console.log(sData.person_id);
});
JSON不是对象/关联数组,而是一个字符串表示形式。 JSON允许您跨语言发送对象,但必须将其从字符串解析为该语言的值。在jQuery中,你可以设置dataType
,但重要的是在任何语言中都要解析JSON。
答案 2 :(得分:-2)
sData
- 字符串
使用jQuery.parseJSON
或jQuery.getJSON()