我的后端验证只接受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)并将其作为参数发送?
答案 0 :(得分:4)
引用OP :
&#34;它就像是我指定的HTML字段(newEmail)并将其作为参数发送?&#34;
是的,当然。这是remote
方法的默认行为......它从正在评估的字段发送数据。
它发送了两个数据参数,因为这是您设置它的方式。
它已经发送了newEmail
字段的值,因为它是您为remote
验证选择的字段。这是使用remote
方法时的默认行为。
它还会再次发送与email
相同的值,因为这正是您使用data
选项定义它的方式。
data: { email: $('#newEmail').val() },
通常,data
选项仅在您希望发送 其他数据默认数据时使用。在这种情况下,要评估的字段的值newEmail
是默认数据。
您应该完全删除data
选项,并且只接受后端的newEmail
。即使没有JavaScript或jQuery Validate插件,newEmail
也正是这些数据在提交时自然会如何通过服务器传递的。
完全删除data
选项,然后将您的标记重命名为email
或修复服务器端代码以接受newEmail
...执行不两次发送相同的数据。
答案 1 :(得分:0)
我认为,您必须更改第2点,作为文档示例。
代替
data: { email: $('#newEmail').val() },
您必须使用
data: { email: function() { return $('#newEmail').val(); } },
答案 2 :(得分:0)
使电子邮件字段为必填字段,并发送电子邮件,并发出远程请求以检查给定的地址是否已被占用。此外,http方法设置为“ post”,并且用户名与电子邮件地址一起发送
$( "#myform" ).validate({
rules: {
email: {
required: true,
email: true,
remote: {
url: "check-email.php",
type: "post",
data: {
username: function() {
return $( "#username" ).val();
}
}
}
}
}
});