我有一个PHP脚本,用于POST请求,返回(回显)数组:
array(3) {
["message"]=>
string(32) "The item was successfully saved"
["newItemId"]=>
int(9)
["newCustomFieldIds"]=>
string(3) "[9]"
}
我的AJAX请求:
$.ajax({
url: 'updateItemDetails.php',
method: 'post',
data: {
...
}
}).done(function(response) {
console.log(response); //correct
console.log(response['newCustomFieldIds']); //undefined
console.log(JSON.parse(response['newCustomFieldIds'])); //unexpected token u
});
第一个console.log产生:
{"message":"The item was successfully saved","newItemId":9,"newCustomFieldIds":"[9]"}
这是预期的。但是,第二个给出了undefined
。
所以,当我JSON.parse时,我得到Uncaught SyntaxError: Unexpected token u
!我想要做的是将"[9]"
变为真正的数组,即。 [9]
。
我不明白这一点。 newCustomFieldIds
肯定存在,因为在记录response
时,我可以看到它 - 那么为什么console.log(response['newCustomFieldIds'])
无效?
答案 0 :(得分:2)
您必须解析response
:
JSON.parse(response).newCustomFieldIds
如果要将字符串"[9]"
转换为数组,则需要调用JSON.parse
两次:
JSON.parse(JSON.parse(response).newCustomFieldIds)
但是,更好的解决方案首先将newCustomFieldIds
的值编码为数组,即JSON应包含"newCustomFieldIds": [9]
。
由于您知道response['newCustomFieldIds']
返回undefined
,因此尝试JSON.parse(response['newCustomFieldIds'])
没有意义。它与JSON.parse("undefined")
相同,但undefined
无效JSON。