я проверить мой формуляр с AJAX и получить обратно следующий JSon объект:JQuery, как пройти через JSON объект динамически
{"username":["Please enter a username"],"email":["Please enter an email"],
"plainPassword":{"first": ["Please enter a password"]},"firstname":
["This value should not be blank."],"lastname":["This value should not be blank."],
"terms":["This value should be true."],"privacy":["This value should be true."],
"captcha":["Code does not match"],"securityQuestion":["This value should not be blank."],
"plainSecurityAnswer":["This value should not be blank."],"intention":
["This value should not be blank."],"addresses":[{"state":["This value should not be blank."],
"city":["This value should not be blank."],"zipcode":["This value should not be blank."],
"country":["This value should not be blank."]}]}
Ключи отображаются в полях ввода идентификатор всегда по: вар ид = «fos_user_registration_form_» + ключ;
Я хочу представить эти ошибки эффективным образом в виде подсказок к полям. Для этого я написал следующий код JQuery (где обратный вызов возвращаемого JSON объект):
$.each(callback, function(key, entry) {
if(key != "addresses" && key != "plainPassword")
{
var id = "#fos_user_registration_form_" + key;
$(id).tooltip('destroy');
$(id).tooltip({'title': entry});
$(id).closest('div[class="form-group"]').addClass('has-error');
}else if(key == "addresses"){
$.each(entry[0], function(keyAddress, entryAddress) {
var id = "#fos_user_registration_form_" + key + "_0_" + keyAddress;
$(id).tooltip('destroy');
$(id).tooltip({'title': entryAddress});
$(id).closest('div[class="form-group"]').addClass('has-error');
});
}else if(key == "plainPassword")
{
var id= "#fos_user_registration_form_plainPassword_first,#fos_user_registration_form_plainPassword_second";
$(id).tooltip('destroy');
$(id).tooltip({'title': entry.first});
$(id).closest('div[class="form-group"]').addClass('has-error');
}});
Это работает, но я думаю, что не очень динамичен, потому что я знаю, в этом случае, что элементы ключа «Адреса» и «plainPassword» не являются строками и что я должен повторять их снова (здесь только по адресам).
Есть ли более хороший способ сделать это, используя только ключ и переменную ввода петель, не зная «ключевых» имен json?
Я подумал о чем-то вроде: В то время как entry! == "string", повторите так же длинные записи, как есть другой массив или объект в нем и создайте переменную id. Когда в качестве «записи» есть поле строки, используйте его в виде текста всплывающей подсказки.
Надеюсь, вы, ребята, можете мне помочь.
С уважением.
Удивительно! Спасибо большое sifriday! Я также пытался использовать рекурсию, но не смог получить удовлетворительный результат. У меня есть еще один вопрос к вашему решению: моя IDE (phpstorm) сообщает мне, что доступ к ключу с помощью «[key]» не так хорош: «Возможная итерация по сравнению с непредвиденными членами, возможно, отсутствующая проверка hasOwnProperty». Не хватает ли чека? –
вещь hasOwnProperty полезна, чтобы убедиться, что вы не итерируете свойства, которые вы унаследовали от прототипа. См. Http://stackoverflow.com/questions/3010840/loop-through-array-in-javascript ... поскольку ваш оригинальный объект находится под вашим контролем и исходит от JSON, вы можете быть уверены, что вам не нужна эта проверка , Надеюсь, это поможет! – sifriday
yep. принял ваш ответ :) –