1000hz загрузчик валидатор на заказ
У меня проблемы с получением возвращаемой строки обратно в валидатор.
Вот мой js
$('#frmSignUp').validator({
custom: {
emailexist: function ($el) {
var result = checkUserEmail($el.val())
.done(function (r) {
if (!r.success) {
// email already in use
return r;
}
})
return result.responseText;
}
}
});
function checkUserEmail(name) {
return $.ajax({
url: '@Url.Action("CheckUserName","Account")',
data: { ChapterPOCEmail: name },
type: 'POST',
dataType: 'json'
});
}
в инструментах Chrome Dev "r" действительно возвращает полный JSON из контроллера
{"success":false,"responseText":"Это электронное письмо уже используется."}
Однако валидатор не получает строку, и поэтому все еще показывает зеленую галочку в отзыве, а в блоке помощи нет сообщений. Я пытался использовать "data-remote", но я не мог заставить asp.net вернуть код состояния вместе с сообщением правильно. оно переписывало любое пользовательское сообщение, которое я отправлял обратно, и валидатор не мог его получить.
Любая помощь по моей проблеме будет принята с благодарностью.
1 ответ
ajax
является асинхронным методом по умолчанию и не возвращает никакого значения.
Вы можете заставить его синхронизироваться или использовать обещания, и использовать его значение для успеха, например...
изменить свой checkUserEmail
с этим:
function checkUserEmail(name) {
var r = false;
$.ajax({
url: '@Url.Action("CheckUserName","Account")',
data: { ChapterPOCEmail: name },
type: 'POST',
dataType: 'json',
async: false // wait for the call, dont treat as an async call
}).done(function(result) {
r = result === "OK";
}).fail(function (err) {
console.log(err, "something went awire");
}).always(function () {
console.log("all done");
});
return r;
}
Я предполагаю, что ваш вызов ajax возвращается OK
, не забудьте изменить это соответственно.