验证用户详细信息更新页面 - 用户名/电子邮件的远程验证

时间:2016-05-06 18:02:00

标签: jquery ajax jquery-validate

在尝试确保用户的电子邮件地址是唯一的时,我遇到了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."
        }
    }
});

1 个答案:

答案 0 :(得分:0)

  

...有什么方法可以通过jquery验证来阻止这种情况吗?

没有

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

您的服务器端代码是否应该足够聪明,无法知道您是在处理新用户还是已经登录并编辑其帐户的现有用户?毕竟,完全依赖客户端代码意味着任何人都可能通过简单地禁用或更改JavaScript来打败这一点。

  

...或者,有没有办法让它用ajax请求发送附加数据

是。

Reading the docs

  

... [for] 选项以完全自定义请求,有关详细信息,请参阅jQuery.ajax

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

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