Разбор массива JSON внутри массива с использованием JavaScript без индекса - PullRequest
1 голос
/ 19 декабря 2011

Не был уверен, как сформулировать заголовок, но вот моя проблема:

Вот мой javascript:

$.post("register", element.serialize(),
        function(data){
             if(data.success == "true"){
                           // Do whatever
            } else if (data.success == "false"){

                for (i = 0; i < data.errors.length; i++){
                      // This is what I need to change      
                      alert(data.errors[i][0]);
                }
            }
        }, "json");

Вот входящая строка JSON:

{"success":"false","errors":{"username":"error with username","email":"error with email"}}

Разбит, то есть:

errors: {
   email: "error with email"
   username: "error with username" }
success: "false"

Я хочу, чтобы в оповещениях говорилось "ошибка с электронной почтой" и "ошибка с именем пользователя"

Ничто, по-видимому, не работаетхотя, есть идеи?

Спасибо

Ответы [ 3 ]

2 голосов
/ 19 декабря 2011

Проблема в том, что ваше свойство errors - это не array, а object со свойствами.Вот код, который вы должны использовать:

alert(data.errors.email);

И действительное array объявление объектов, обратите внимание на []:

errors: [
   { email: "error with email", username: "error with username" },
   { email: "error with email 2", username: "error with username 2" }
]
1 голос
/ 19 декабря 2011

data.errors не является массивом. Это объект со свойствами:

data.errors.username
data.errors.email

Из вашего вопроса неясно, что вы хотите сделать с этими двумя свойствами, но именно так вы к ним получаете доступ.

Если вы хотите перебрать свойства объекта ошибок, вы можете сделать это следующим образом:

for (var key in data.errors) {
    // data in data.errors[key] here
}
0 голосов
/ 19 декабря 2011

Используйте петлю for ( in ). Это позволит вам перебирать свойства объекта.

var msgs = [];
for (var error in errors) {
   msgs.push(errors[error]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...