2011-03-16 31 views
1

我有一個響應從我的服務器,看起來像這樣如何獲得我的json的計數?

{"Errors":{"ViewModels[0]":"Not a valid number."},"IsValid":false,"SuccessMessage":null} 

我通過錯誤contrained的所有值要循環回來(在這種情況下,只有一個,但可能有很多)。

我試圖

function createErrorList(response) 
    { 
     for (var i = 0; i < response.Errors.length; i++) 
     { 
      var error = response.Errors[i]; 
      alert(error); 
     } 
    } 

長度是alwasy未定義雖然。所以我不確定我做錯了什麼。

+0

你有兩個錯誤的例子嗎?這是一個返回的對象(沒有長度元素),不清楚它是否會繼續作爲一個對象(元素1:「ViewModels [0]」元素2:「ViewModels [1]」),或者它將切換到數組。 – Rudu 2011-03-16 19:51:48

回答

0
for (var error in response.Errors) 
{ 
    alert(response.Errors[error]); 
} 

您可能還需要包括hasOwnProperty如果你是偏執的對象物體上的原型迭代。

+0

不知道你可以做一個for循環看起來像在JavaScript中。什麼是[錯誤]你使用的是? – chobo2 2011-03-16 19:52:20

+0

這是一個像我在你的循環變量。它不是用數字填充,而是用對象的鍵值對中的每個鍵填充。把(var error放在...中)可能更安全,因爲它確保它是一個局部變量。 – Plynx 2011-03-16 19:53:55

+1

它也比較慢:請參閱我的引用以獲取本說明:http://blogs.sun.com/greimer/entry/best_way_to_code_a – 2011-03-16 20:11:05

1

在這種情況下,錯誤不是數組,而是一個對象。服務器的響應應該是這樣的:

{"Errors":[{"ViewModels[0]":"Not a valid number."},{"viewmodels[1]":"Another Message"}],"IsValid":false,"SuccessMessage":null} 

爲了工作。請注意[]。

for(var key in response.Errors) { 
    var value = response.Errors[key]; 
} 
0

response.Errors是一本字典不是一個列表,所以你必須通過這樣

+0

我怎麼能遍歷它?我可以通過索引獲取值嗎?所以我不必調用關鍵名稱?我可能不會沒有鍵名。 – chobo2 2011-03-16 19:48:29

+0

看到http://stackoverflow.com/questions/890807/iterate-over-a-javascript-associative-array-in-sorted-order – 2011-03-16 19:51:15