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, не забудьте изменить это соответственно.

Другие вопросы по тегам