我正在尝试将远程验证器与Parsley一起使用,而我似乎无法通过请求发送其他数据。相关字段是一个电子邮件字段,我想将其发送到服务器以查看电子邮件地址是否可用'。另外,我需要发送一个服务器需要的id参数。 id参数嵌入在我的表单中的主机'字段。
所以,我尝试使用Parsley DOM API如下:
<input type="text" class="form-control" tabindex="15" id="email" name='email'
data-parsley-type="email" data-parsley-type-message="Must be a valid email format"
data-parsley-required="true" data-parsley-required-message="Email is required"
data-parsley-remote="/invitation/allowed"
data-parsley-remote-options='{ "type": "get", "data" : { "id": function() {return $("#host").val(); } }}'>
在API配置的最后一行中,我尝试了各种组合,以将主机字段的值输入到我的URL中。这些包括转义函数中的引号;并证明&#39;主持人&#39; (或&#39;#host&#39;)作为id属性的值。在每种情况下,我只能通过URL传递我的电子邮件地址。
请注意,我可以传递文字没有问题(例如{ "id": "TestTest" }
)。
我也尝试过如下使用javascript:
<script type="text/javascript" src="/js/parsley.remote.js"></script>
<script type="text/javascript">$('#employee-form').parsley({})</script>
<script type="text/javascript">
$('#email').parsley().addConstraint('remote',
{
url: '/invitation/allowed',
type: 'GET',
data: {
id: function () { return $('#host').val() }
}
})
</script>
当我这样做时,我有两个问题:未在URL中设置id,并且基本URL也不正确 - 它调用当前页面的地址(不是/邀请/允许)。
几小时前提出的这个问题类似:Remote validation for a field which depends on others
答案 0 :(得分:2)
我遇到了同样的麻烦,想要为每个请求传递一个API密钥,所以我提交了一个带有该功能的拉取请求。我想它很快就会正式发布,请点击下拉请求:
答案 1 :(得分:1)
Parsley pull request #645似乎没有完全解决问题。它允许您在addAsyncValidator()
调用中指定ajax选项,但这些选项在调用时进行评估,而不是在发出ajax请求时(例如ajax data
选项在页面上填充一次) load。)因此请求中传递的任何其他表单值都不是&#34; live&#34;它们是addAsyncValidator()
被调用时的价值。看来我们需要能够为data
参数指定一个函数。我对Parsley.js代码进行了一些小调整,允许:
validateString
中的现有代码:
// Merge options passed in from the function with the ones in the attribute
var remoteOptions = $.extend(true, options.options || {}, Parsley.asyncValidators[validator].options);
然后我的补充:
if (typeof remoteOptions.data === 'function') {
remoteOptions.data = remoteOptions.data();
}
然后在你的代码中:
<input type="text" ... id="host" data-parsley-remote="" data-parsley-remote-validator="invitation" />
<input type="text" ... id="email" data-parsley-remote="" data-parsley-remote-validator="invitation" />
<script>
window.Parsley.addAsyncValidator(
'invitation',
function (xhr) {
return xhr.status == 200;
},
'/invitation/allowed',
{
data: function () {
return {
host: $('#host').val(),
email: $('#email').val();
};
}
}
);
</script>
我没有看到任何其他方法,除了销毁异步验证器并在每次相关表单值更改时重新创建它。
注意两件事:(1)函数替换未添加的数据,(2)如果 any ,您似乎需要进行异步验证相关投入的变化。