【发布时间】:2015-07-23 11:17:18
【问题描述】:
使用 jQuery 验证插件,我一直在尝试检索表单的输入字段值,将其与一些 url 前缀连接以生成 REST url,然后通过 remote 方法向生成的 url 发出 GET 请求。
下面是REST接口的方法(服务器端是java)
@Path("/user")
public interface UserResource {
@GET
@Path("/registered/email/{value}")
public boolean isRegistered(@PathParam("value") String value);
}
这是要验证的输入字段的样子
<form id="registerForm" action="/register" method="POST">
<input class="form-control" id="email" name="email" type="email" value='${email}' required/>
...
</form>
然后是 jQuery 验证脚本;
$('body #registerForm').validate({
rules : {
'email': {
required: true,
email: true,
remote: "/user/registered/email/" + $(this).find('#email').val()
},
},
messages : {
'email': {
required: 'Please enter your email address',
email: 'Please provide a valid email address',
remote: 'Email has already been taken',
},
},
});
请注意传递给remote 方法的值是简单的REST url,因为根据http://jqueryvalidation.org/remote-method/,默认请求type 是GET...还要注意@987654328 如何@ 和 data 未指定,因为在这种情况下不一定需要它们。
目标:
...现在,假设用户输入的电子邮件是 username@email.com 我通常希望生成的 url 如下所示;
http://localhost:8080/user/registered/email/username@email.com
问题: ...但是这就是我得到的;
http://localhost:8080/user/registered/email/?email=username@email.com
问题: ...注意网址中username@email.com之前的?email=...我想知道为什么$(this).find('#email').val() 被连接为查询参数?...请有人向我解释为什么会这样吗?..还有我该如何解决这个问题?
谢谢。
【问题讨论】:
-
我认为是因为插件获取了验证规则的名称来传递参数。
-
这不是一个答案,但是,您最好使用
submitHandler并进行自己的ajax 调用等。 -
您是否尝试过设置 email: false,而不是?我的意思是,它怎么知道查询字符串 ?email=username@email.com
-
该字段的值就是
$('#email').val()。$(this).find()完全没有必要。使用查询字符串?field="value"&field2="value2"....,正是使用GET请求发送数据的方式。您不会使用 URL 段在服务器端获取此值,只需使用GET数组。 -
@Sparky,感谢您的提醒...我在想 GET 数组也可能是一个出路。我会马上试一试,然后再反馈
标签: java javascript jquery rest jquery-validate