Java JQuery验证-如何正确检索“中的表单字段值”;“远程”;方法?
使用jQuery验证插件,我一直在尝试检索表单的输入字段值,将其与某个url前缀连接以生成REST url,然后通过Java JQuery验证-如何正确检索“中的表单字段值”;“远程”;方法?,java,javascript,jquery,rest,jquery-validate,Java,Javascript,Jquery,Rest,Jquery Validate,使用jQuery验证插件,我一直在尝试检索表单的输入字段值,将其与某个url前缀连接以生成REST url,然后通过remote方法向生成的url发出GET请求 下面是REST接口的方法(服务器端是java) 下面是要验证的输入字段的外观 <form id="registerForm" action="/register" method="POST"> <input class="form-control" id="email" name="email" type="e
remote
方法向生成的url发出GET请求
下面是REST接口的方法(服务器端是java)
下面是要验证的输入字段的外观
<form id="registerForm" action="/register" method="POST">
<input class="form-control" id="email" name="email" type="email" value='${email}' required/>
...
</form>
请注意,传递给远程
方法的值只是RESTURL,因为根据,默认请求类型
是GET。。。还请注意,由于这种情况下不一定需要数据类型
和数据
,因此没有指定它们
目标:
... 现在,假设用户输入的电子邮件是username@email.com
我通常希望生成的url如下所示:
http://localhost:8080/user/registered/email/username@email.com
问题:
... 但我得到的是
http://localhost:8080/user/registered/email/?email=username@email.com
问题:。。。注意之前的?email=
username@email.com
在url中。。。我想知道为什么将$(this).find('#email').val()
的结果连接为查询参数?。。。有人能给我解释一下为什么会这样吗?。。我该如何解决这个问题呢
谢谢。您正在向网站上的文件夹或位置发出get请求。您需要提供一个执行检查的脚本。因此,您的远程url应该类似于“/user/registed/email/check_email.php”。
另外,GET请求的整体思想是将参数作为名称/值对传递,这些名称/值对固定在“?”分隔符之后的查询字符串上。看见您没有提供实际的远程脚本,也没有为您的值提供参数名,因此您只需要获取url+“?”+您的值。
最后,我建议您使用POST方法。在为其提供链接的资源中,查看第二个示例。它显示了如何指定POST。
这一切有意义吗
问题:。。。注意前面的?email=username@email.com
在url中。。。我想知道为什么将$(this).find('#email').val()
的结果连接为查询参数?。。。有人能给我解释一下为什么会这样吗?。。我该如何解决这个问题呢
默认情况下,查询字符串,?field=“value”&field2=“value2”…
正是与GET
请求一起发送数据的方式。通常,您不会使用URL段在服务器端获取此值,只需使用GET
数组即可
使用与jQuery.ajax()
相同的选项。指
数据类型:纯对象或字符串或数组
要发送到服务器的数据如果不是字符串,则转换为查询字符串。它被附加到GET请求的url请参阅
processData
选项以防止自动处理。对象必须是键/值对。如果value是数组,jQuery将基于传统设置的值(如下所述)使用相同的键序列化多个值
processData(默认值:true)类型:布尔值
默认情况下,作为对象传递到数据选项的数据(从技术上讲,不是字符串)将被处理,并转换为查询字符串,符合默认内容类型“application/x-www-form-urlencoded”。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false
操作标题:JQuery验证-如何在“远程”方法中正确检索表单字段值 要获取字段的值,只需选择字段并将其附加到jQuery
.val()
。不需要使用$(this)。查找(…
$('#email').val()
试试这个
rules : {
'email': {
required: true,
email: true,
remote: {
url: "/user/registered/email/" + $('#email').val(),
processData: false
}
},
},
我使用此代码来解决REST服务问题:
$("#mailingAddress").rules("add", {
required: true,
remote: function () {
var r = {
url: "/Api/Address/ValidateAddressSimple/" + $("#mailingAddress").val(),
type: "post",
cache: false,
dataFilter: function (response)
{
return response;
}
};
return r;
},
messages: {
remote: "* not valid"
}
});
摘自本帖:
目标:…现在,假设用户输入的电子邮件是username@email.com我通常期望得到的url如下所示:
问题是:……但我得到的是
这里有两个问题。第一个问题是validate方法在执行时解析url路径-默认情况下不会动态重新检查。当它运行时,基本上在呈现表单时,您的电子邮件输入字段为空。因此路径解析为“+”(开始时使用的静态字符串,与空输入字段中的空字符串连接)
第二个问题是,jQuery.validate的远程方法默认情况下会将已验证字段的“name”和“value”属性作为查询参数发送—当然,这不是其余的处理方式。它们被压缩为“?电子邮件”=username@email.com,它位于URL的其余部分之后,因为它是在第一步中解析的
要绕过第一个问题,并构建一个REST路径,您必须将URL构建封装在一个函数中,每次请求对该输入进行验证时,都将执行该函数
$('body #registerForm').validate({
rules : {
'email': {
required: true,
email: true,
remote: function() {
return '/user/registered/email/' + $('#email').val()
}
}
}
});
这将产生一个正确的REST API url,尽管它仍然会附加查询字符串。它将如下所示:
诚然,这很难看,但您的API很可能会默默地忽略查询字符串,并按预期执行
但是为了获得更干净、更RESTful的url,您需要重置ajax调用的数据属性
$("#mailingAddress").rules("add", {
required: true,
remote: function () {
var r = {
url: "/Api/Address/ValidateAddressSimple/" + $("#mailingAddress").val(),
type: "post",
cache: false,
dataFilter: function (response)
{
return response;
}
};
return r;
},
messages: {
remote: "* not valid"
}
});
$('body #registerForm').validate({
rules : {
'email': {
required: true,
email: true,
remote: function() {
return '/user/registered/email/' + $('#email').val()
}
}
}
});
$('body #registerForm').validate({
rules : {
'email': {
required: true,
email: true,
remote: function() {
return {
url: '/user/registered/email/' + $('#email').val(),
data: ''
}
}
}
}
});