0

我正在使用jQuery Validate 插件重写一些 javascript 验证

发生的一个问题是检查用户名是否有效的函数。它通过发送一个包含用户名的 ajax 调用来做到这一点。

请求 URL 需要如下所示:

/ajax/check-username/usernamehere

当前功能:

var checkUsername = function(value){
    var username = false;
    jQuery.ajax({
        url: "/ajax/check-username/" + encodeURI(value)
    }).done(function (data) {
        if (data.exists) {
            username = false;
        } else {
            username = true;
        }
    });
    return username;
}

jQuery Validate 请求路径如下所示:

/ajax/check-username/?username=usernamehere

jQuery 验证:

jQuery('#user').validate({
    rules: {
        username: {
            required: true,
            minlength: 6,
            remote: {
                url: '/ajax/check-username/'
            }
        }
    }
});

如何让远程方法使用我当前的 url 路由?

4

1 回答 1

0

您的原始 JavaScript 函数正在查看数据是否存在。

if (data.exists) {
    username = false;
} else {
    username = true;
}

但是,根据remoterule的文档,您需要true从服务器脚本返回才能通过验证。几乎任何其他响应都会触发验证错误消息。

“响应被评估为 JSON,并且必须true有效元素,并且可以是任何falseundefinednull无效元素,使用默认消息;或字符串,例如。'该名称已被使用,请尝试 peter123'以显示为错误信息。”

您最好的解决方案是修改您的服务器脚本,/ajax/check-username/以便true在不存在数据时返回;以及false您想要的错误消息。


引用操作:

“如何让远程方法使用我当前的 url 路由?”

简短的回答:你没有。

远程方法dataType使用以下默认设置将数据作为 JSON 发送到您的服务器脚本...

dataType: "json",
data: { nameOfTheElement: valueOfTheElement }

因此,您可以修改服务器脚本以简单地接受这种 JSON 格式的传入数据。

remote否则,您可以在声明时更改设置。

取自文档的示例:

rules: {
    username: {
        required: true,
        minlength: 6,
        remote: {
            url: "/ajax/check-username/",
            type: "post",
            data: {
                username: function() {
                    return $( "#username" ).val();
                }
            }
        }
    }
}
于 2013-09-10T15:01:18.970 回答