【问题标题】:1000hz bootstrap validator custom1000hz 引导验证器自定义
【发布时间】:2017-09-16 16:11:00
【问题描述】:

我无法将返回字符串传回验证器。

这是我的 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 开发工具中,“r”确实具有从控制器返回的完整 json

{"success":false,"responseText":"该邮件已被使用。"}

但是,验证器没有收到字符串,因此在反馈中仍然显示绿色复选标记,并且帮助块中没有消息。我曾尝试使用“数据远程”,但我无法让 asp.net 正确返回状态代码和消息。它覆盖了我发回的任何自定义消息,验证器无法接收它。

对我的问题的任何帮助将不胜感激。

【问题讨论】:

    标签: jquery bootstrapvalidator-1000hz


    【解决方案1】:

    ajax 是一个异步方法by deafult,不返回任何值。

    您可以强制它同步或使用承诺,例如使用它的成功价值...

    用这个改变你的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,记得相应地更改它。

    【讨论】:

    • 谢谢!我新它与异步性质有关,但我无法找到正确的方法来获取它。
    猜你喜欢
    • 2015-12-04
    • 2017-07-15
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2019-11-11
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多