验证用户详细信息更新页面 - username/email 的远程验证

Validating user details update page - remote validation of username/email

我在尝试确保用户的电子邮件地址是唯一的时遇到了 Jquery 验证的问题。 我正在尝试验证用户详细信息更新表单。现在,电子邮件和用户名是唯一的,所以当我尝试使用 Jquery validate 的远程规则对其进行验证时,它只发送输入的值,服务器端代码告诉它它实际上已被占用,即使它已被占用由同一个用户。 所以,我的问题是:是否有某种方法可以通过 jquery 验证来防止这种情况发生?就像,也许是某种数据原始值属性,或者,有没有办法让它通过 ajax 请求发送额外的数据,这样我就可以在服务器端使用它代码检查该值是否被同一用户使用?

这是我的代码。相当标准:

$(".validateForm").validate({
    rules: 
    {
        handle: 
        {
            required: true,
            remote:'/home/check'
        }
    },
    messages: 
    {
        handle: 
        {
            required: "Must include a handle",
            remote:"This handle is already used up. Please, choose another one."
        }
    }
});

...is there some kind of way to prevent this through jquery validate?

没有

remote 方法没有智能...它只是根据您从服务器发送的内容进行验证。换句话说,您在 /home/check 的服务器端代码必须确定该字段是否有效并发回适当的响应。

您的服务器端代码不应该足够聪明,知道您是在与新用户打交道,还是在与已经登录并编辑其帐户的现有用户打交道?毕竟,完全依赖客户端代码意味着任何人都可以通过简单地禁用或更改 JavaScript.

来解决这个问题

...OR alternatively, is there any way to get it to send additional data with the ajax request

是的。

Reading the docs:

...[for] options to fully customize the request, see jQuery.ajax for details

因此,根据文档中的示例,您可以像这样使用 $.ajax 中的 data 选项...

rules: {
    handle: {
        required: true,
        remote: {
            url: '/home/check',
            data: {
                more_stuff: function() {
                    return "some_value";
                }
            }
        }
    }
}

请注意,正在验证的字段的值仍会随之发送。


旁注you may wish to reconsider using Allman code formatting for your JavaScript.