我的后端验证仅接受1个参数:email

当我查看Firebug时,可以看到请求的URL发送2个参数:

https://example.com/rest/checkDupEmail?newEmail=myEmail%40myEmail.com&email=


这是验证码...

HTML:

<input type="textbox" name="newEmail" id="newEmail"/>


JS:

validator = $('#emailForm').validate({
    rules: {
        newEmail: {
            required: true,
            remote: {
                url: '/rest/checkDupEmail',
                data: { email: $('#newEmail').val()},
                dataFilter: function(data) {
                    var json = JSON.parse(data);
                    console.log($('#newEmail').val());
                    console.log(data);
                }
            }
        }
    }
});


就像它采用我指定的HTML字段(newEmail)并将其作为参数发送吗?

最佳答案

引用OP:


  “就像将我指定的HTML字段(newEmail)当作参数发送一样?”


当然是。这是remote方法的默认行为...它从正在求值的字段发送数据。



它正在发送两个数据参数,因为这就是您设置它的方式。


它已经发送了newEmail字段的值,因为这是您为remote验证选择的字段。使用remote方法时,这是默认行为。
它也再次发送与email相同的值,因为这正是使用data选项定义它的方式。

data: { email: $('#newEmail').val() },



通常,仅当您要与默认数据一起发送其他数据时,才使用data选项。在这种情况下,要评估的字段的值newEmail是默认数据。

您应该完全删除data选项,并且仅在后端接受newEmail。即使没有JavaScript或jQuery Validate插件,newEmail仍将是提交时自然将这些数据传递到服务器的方式。

完全删除data选项,然后将标记重命名为email或修复服务器端代码以接受newEmail ...不要两次发送相同的数据。

文档:http://jqueryvalidation.org/remote-method/

09-18 22:04