Java JQuery验证-如何正确检索“中的表单字段值”;“远程”;方法?

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

使用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="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: ''
                }
            }
        }
    }
});