Javascriptを使用した配列内のJSON配列の索引なしの解析

タイトルをどのようにフレーズするかわからなかったが、ここに私の問題がある。

ここに私の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"

アラートに「電子メールのエラー」と「ユーザー名のエラー」と言うようにしたい

私がやっているように見えるものは何もありません。

ありがとう

1
アラートを試みる(data.errors.username);
追加された 著者 Unknown,
申し訳ありませんが明確ではない、私は必ずしもインデックスが何であるか知っているわけではありません。私は "電子メール"または "ユーザー名"を知らずに文字列を表示したい
追加された 著者 mike,
下の回答のいくつかは問題を解決してくれています。
追加された 著者 mike,

3 答え

問題は、 errors プロパティが配列ではなくプロパティを持つオブジェクトであることです。 使用するコードは次のとおりです。

alert(data.errors.email);

そして、オブジェクトの有効な配列宣言は、 [] に注意してください。

errors: [
   { email: "error with email", username: "error with username" },
   { email: "error with email 2", username: "error with username 2" }
]
2
追加された

data.errors is not an array. It's an object with properties:

data.errors.username
data.errors.email

これらの2つのプロパティで何をしたいのかはあなたの質問からは分かりませんが、それはアクセス方法です。

errorsオブジェクトのプロパティを反復したい場合は、次のようにすることができます:

for (var key in data.errors) {
   //data in data.errors[key] here
}
1
追加された
うん、これはトリックでした、ありがとう
追加された 著者 mike,

for(in)ループを使用します。これにより、オブジェクトのプロパティを繰り返し処理できます。

var msgs = [];
for (var error in errors) {
   msgs.push(errors[error]);
}
0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript