У меня есть форма, которая использует ненавязчивую проверку JQuery вместе с резюме проверки. Он отлично работает. Однако эта форма выполняет AJAX POST, который возвращает результат JSON. Если результат == true, я продолжаю. Однако, если результат JSON возвращает массив сообщений, я хочу запустить проверку формы для обновления полей. Ошибки возвращаются следующим образом:
{
"errors": [
{ "key" : "NameFirst", "message": "This is the message" },
{ "key" : "NameLast", "message": "This is the message" }
]
}
Я разбираю результат JSON и вызываю showErrors() следующим образом:
for (var j = 0; j < response.errors.length; j++) {
var key = response.errors[j].key;
var error = {};
error[key] = response.errors[j].message;
$form.data('validator').showErrors(error);
}
Это правильно выделяет поля, но не обновляет сводку проверки. Как я могу получить это для обновления?
Кроме того, иногда ошибки являются общими и не сопоставляются с определенным свойством/полем в модели. В этом случае они возвращаются с нулевыми ключами, например:
{
"errors": [
{ "key" : null, "message": "This is the message" },
{ "key" : null, "message": "This is the other message" },
{ "key" : "NameFirst", "message": "This is the message" },
{ "key" : "NameLast", "message": "This is the message" }
]
}
Я не могу вызывать showErrors, потому что они не сопоставляются с идентификатором поля. Как только мне сообщают, как обновить сводку, я уверен, что могу добавлять элементы в список для общих сообщений, но я открыт для других предложений. Спасибо!
UPDATE
Вот что я в итоге сделал, кажется, работает неплохо. Мне нужно собрать сводку вручную в дополнение к вызову showErrors для допустимых ошибок с ключами:
var $summary = $form.find("[data-valmsg-summary=true]")
.addClass("validation-summary-errors")
.removeClass("validation-summary-valid");
var $ul = $summary.find("ul").empty();
var error = {};
$.each(response.errors, function () {
if (this.key)
error[this.key] = this.message;
$("<li />").html(this.message).appendTo($ul);
});
$form.validate().showErrors(error);
Я надеюсь, что это поможет другим.