[英]Why are these Object Properties undefined?
我正在嘗試使用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
,以便您的代碼可以將數據解釋為對象而不是字符串。
$.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);
});
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。
sData
字符串
使用jQuery.parseJSON
或jQuery.getJSON()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.