[英]Parsing JSON from PHP
我正在嘗試從PHP腳本返回的JSON對象中進行迭代。 返回部分是這樣的:
$json = array("result" => -1,
"errors" => array(
"error1" => array("name" => "email","value" => "err1"),
"error2" => array("name" => "pass","value" => "err2")
)
);
$encoded = json_encode($json);
echo $encoded;
因此,在JavaScript中,我可以執行以下操作:
var resp = eval('(' + transport.responseText + ')');
alert(resp.length);
alert(resp.errors.error1.name);
但是我不能:
alert(resp.errors.length);
我想遍歷errors
,這就是為什么我要獲取長度。 有人可以給我提示嗎? 謝謝!
為此,您需要將resp.errors
用作Javascript數組,而不是Javascript對象。
在PHP中,數組可以具有named-keys; 用Javascript是不可能的; 因此,當使用json_encode
, errors
PHP數組被“轉換”為JS對象:您的JSON數據如下所示:
{"result":-1,"errors":{"error1":{"name":"email","value":"err1"},"error2":{"name":"pass","value":"err2"}}}
相反,您希望它看起來像這樣:
{"result":-1,"errors":[{"name":"email","value":"err1"},{"name":"pass","value":"err2"}]}
請注意,沒有命名鍵的數組中的“ errors
”。
為此,您的PHP代碼必須為:
$json = array(
"result" => -1,
"errors" => array(
array("name" => "email","value" => "err1"),
array("name" => "pass","value" => "err2")
)
);
$encoded = json_encode($json);
echo $encoded;
(只需刪除有關errors
的named-keys)
看一下您的JSON輸出。 resp.errors
將是這樣的:
{"error1": {"name": "email", "value": "err1"}, ...}
如您所見,它是一個對象,而不是一個數組(因為您將其傳遞給一個關聯數組,而不是一個數字索引數組。)如果要遍歷JavaScript中的對象,可以這樣進行:
for (var error in resp.errors) {
alert(resp.errors[error].name);
}
如果希望它是一個JavaScript數組,則PHP應該如下所示:
$json = array("result" => -1, "errors" => array(
array("name" => "email","value" => "err1"),
array("name" => "email","value" => "err1")
));
如果檢查Firebug中的評估對象,您會發現“錯誤”不是數組而是對象(PHP中的關聯數組轉換為JS中的對象)。 因此,您需要使用for-in語句來遍歷對象。
您需要使用hasOwnProperty檢查每個屬性名稱,以確保它是您發送的內容,而不是某些原型屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.