2013-01-07 139 views
2

好吧,這很奇怪。我使用PLUpload,它有一個onComplete函數,它返回一個名爲info的變量。這是Chrome開發者控制檯返回的內容。處理AJAX返回的對象JSON

Object {response: "[{"id":"65","series":"","part":"","title":"","subt…,"file":"","product":"","type":"1","status":"2"}]", status: 200} 
var response = $.parseJSON(info['response']); 

$.each(response, function(key, value) { 
    console.log(value); 
    $.each(value, function(k, v) { 
     console.log(v); 
    }); 
}); 

console.log(value)讓我這個在Chrome瀏覽器開發控制檯:

Object {id: "69", title: "", ogv: "", webm: "", length: "0:12"…} 

我可以調低箭頭,看到我所有的元素。所以我認爲在value上做$.each會產生任何東西,但console.log(v)回聲不起作用。

但是,如果我做console.log(value['id'])我得到65.所以那個作品。

爲什麼我不能用$.each函數遍歷這個對象?

+2

因爲只有一個維度的ThOD。你沒有嵌套的對象或數組來循環使用你的第二個循環。 – zerkms

+0

適用於我的警告,我不得不修復發布的對象中的語法錯誤。請記住,你顯示的大部分字段都有空字符串值http://jsfiddle.net/w7CZw/ – charlietfl

+0

你正在使用哪個版本的jQuery?它在這裏工作正常http://jsfiddle.net/arunpjohny/N5XZJ/ –

回答

0

$。每個不能超過給定的對象迭代,因爲你是使用長度作爲密鑰,並且這也是JavaScript方法,這是$。每個不使用hasOwnProperty方法

jQuery .each Bug還提到here

因此更好地利用核心jQuery的錯誤的javascript for..in我用特性,這是標量對象:與hasOwnProperty檢查

var op = { "id":"69", "title":"", "ogv":"", "webm":"", "length":"012" }; 
for(var i in op) { 
    if(op.hasOwnProperty(i)) { 
     console.log(i + ':' + op[i] + '\n'); 
    } 
} 
+1

謝謝。你的解釋很容易理解。 – swg1cor14

+0

謝謝。你的Upvote鼓勵我。:) – diEcho

1

這可能被認爲是jQuery中的一個錯誤,但是您正在迭代的對象具有length屬性。顯然,$.each使用length爲迭代的目的。你最好用for..in

+0

檢查'object.hasOwnProperty' – diEcho

0

$.each用於迭代集合(數組)。您正試圖遍歷對象的屬性。這是通過for..in循環完成的。

var response = $.parseJSON(info["response"]); 

$.each(response, function(key, value) { 
    for (property in value) { 
     if (value.hasOwnProperty(property)) 
      console.log(property + " -> " + value[property]); 
    } 
}); 

編輯:

另外,服務器與在它一個對象返回的數組。如果你知道你正在接受每次只有一個對象,這可以簡化爲:

var value = $.parseJSON(info["response"])[0]; 

for (property in value) { 
    if (value.hasOwnProperty(property)) 
     console.log(property + " -> " + value[property]); 
}