2015-01-05 37 views
0

我嘗試獲取數組中的對象數量,但未定義「長度」。無法讀取ajax中未定義的屬性「長度」

我的JS

.. 
     success: function(data){ 
     console.log(data.item.length); 
     }, 

我的PHP

<?php 
    $arr = array(); 
    $arr["item"]["book"] = "harry porter"; 
    $arr["item"]["available"] = true; 

    echo json_encode($arr); 
?> 

輸出

{"item":{"book":"harry porter","available":true}} 
+0

什麼'dataType'你的要求T'看起來數據沒有被jQuery解析。解析後,控制檯將顯示'undefined',因爲數組具有'length'屬性而不是對象。 – undefined

+0

在你的ajax請求中,如果你添加dataType:「json」那麼它應該工作 – Ekim

回答

1

經由HTTP(S)請求發送的所有內容被接收爲字符串(在Ajax中,至少) 。當您收到一個JavaScript格式的字符串時,它被稱爲JSON。您需要將此JSON解析爲可讀的JavaScript對象。

您需要使用JSON.parse函數,這會將JSON轉換爲JavaScript對象。 還.length,所以你需要使用console.log(Object.keys(data).length);

你的函數看起來像只適用於數組不是對象:

data=JSON.parse(data); 
console.log(Object.keys(data).length); 
1

data = {"item":{"book":"harry porter","available":true}}; 
 
alert(Object.keys(data.item).length);

0

你必須將JSON字符串解析到一個JSON對象,然後再對其進行操作。我看到這個項目不是數組。如果你想成爲一個數組,它必須是這樣

{item : [{"book" : "harry potter", "available" : true}, {..}]} 
+0

爲什麼?我以爲我的PHP產生了一個數組? –

+0

如果你看到你的輸出,它不會以陣列格式生成輸出 –

0

我試圖讓對象的數量數組

在成功回調中你有一個JS對象,你想得到其中的objects的數量。所以當你做data.item.length時,它會檢查不可用的js對象的長度。

相反,你必須檢查JS對象的鍵的名稱,如item它可在回調data對象。所以這塊您正在尋找的代碼是這樣的:

Object.keys(data).length 

這將算{"item":{}}鍵名,所以你的情況,你只需要一個(1)

var obj = {"item":{"book":"harry porter","available":true}}; 
 
alert(Object.keys(obj).length)

所以在你的成功回調,你可以這樣做:

success: function(data){ 
    console.log(Object.keys(data).length); 
    }, 
0
alert(Object.keys(data).length); 

你的代碼可能會喜歡這個

$.ajax({ 
url: "items.php", 
type: "POST", 
dataType: "JSON", 
success: function(data) { 
data=JSON.parse(data); 
alert(Object.keys(data).length); 
}); 
+0

@jamie eason是否適合你? – Priyank

相關問題