2011-03-16 4 views
1

J'ai une réponse en revenant de mon serveur qui ressemble à ceciComment obtenir un compte pour mon json?

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

Je veux boucle à travers toutes les valeurs contrained des erreurs (dans ce cas, il n'y a qu'un seul, mais il pourrait y avoir beaucoup).

J'ai essayé

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

longueur est définie alwasy cependant. Donc, je ne suis pas sûr de ce que je fais mal.

+0

Avez-vous un exemple avec deux erreurs? C'est un objet retourné (pas d'élément de longueur), on ne sait pas s'il continuera à être un objet (élément 1: "ViewModels [0]" élément 2: "ViewModels [1]") ou s'il va basculer dans un tableau. – Rudu

Répondre

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

Vous pouvez également inclure hasOwnProperty si vous êtes paranoïaque à propos de prototypes sur l'objet de l'objet.

+0

Je ne savais pas que vous pouviez faire une boucle for ressembler à celle de javascript. Quelle est [erreur] utilisez-vous celle du pour? – chobo2

+0

C'est une variable comme dans votre boucle for. Au lieu d'être rempli avec des nombres, il est rempli avec chaque clé dans les paires clé-valeur de l'objet. Mettre (var error in ...) est probablement plus sûr car il s'assure que c'est une variable locale. – Plynx

+1

c'est aussi plus lent: voir ma citation pour cette note: http://blogs.sun.com/greimer/entry/best_way_to_code_a –

1

Les erreurs ne sont pas un tableau c'est un objet dans ce cas. La réponse du serveur devrait être quelque chose comme:

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

Pour que cela fonctionne. Noter la [].

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

response.Errors est un dictionnaire pas une liste de sorte que vous devez itérer en tant que tels

+0

Comment pourrais-je parcourir à travers elle? Pourrais-je obtenir les valeurs par index. Donc je n'ai pas à appeler le nom de la clé? Je ne vais probablement pas le nom de famille. – chobo2

+0

Voir http://stackoverflow.com/questions/890807/iterate-over-a-javascript-associative-array-in-sorted-order –

Questions connexes