Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 欧芹远程和附加参数_Javascript_Validation_Parsley.js - Fatal编程技术网

Javascript 欧芹远程和附加参数

Javascript 欧芹远程和附加参数,javascript,validation,parsley.js,Javascript,Validation,Parsley.js,我正在尝试将远程验证器与欧芹一起使用,但似乎无法随请求发送其他数据。有问题的字段是电子邮件字段,我想将其发送到服务器,以查看电子邮件地址是否“可用”。此外,我需要发送服务器所需的id参数。id参数嵌入在我的表单中的“主机”字段中 因此,我尝试使用欧芹DOM API,如下所示: <input type="text" class="form-control" tabindex="15" id="email" name='email' data-parsl

我正在尝试将远程验证器与欧芹一起使用,但似乎无法随请求发送其他数据。有问题的字段是电子邮件字段,我想将其发送到服务器,以查看电子邮件地址是否“可用”。此外,我需要发送服务器所需的id参数。id参数嵌入在我的表单中的“主机”字段中

因此,我尝试使用欧芹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(); } }}'>
<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不正确-它调用当前页面的地址(not/invitation/allowed)


几个小时前提出的这个问题与此类似:

我也遇到了同样的问题,希望在每个请求中传递一个API密钥,所以我提交了一个带有此功能的请求。我想它很快就会正式发布,请参见此处的pull request:


我也遇到了同样的问题,想在每个请求中传递一个API密钥,所以我提交了一个带有该功能的请求。我想它很快就会正式发布,请参见此处的pull request:

欧芹似乎没有完全解决这个问题。它允许您在
addAsyncValidator()
调用中指定ajax选项,但这些选项在调用时进行评估,而不是在发出ajax请求时进行评估(例如,ajax
data
选项在页面加载时填充一次),因此请求中传递的任何其他表单值都不是“活动的”它们是调用
addAsyncValidator()
时的值。似乎我们需要能够为
数据
参数指定一个函数。我对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>

window.Parsley.addAsyncValidator(
“邀请”,
函数(xhr){
返回xhr.status==200;
},
“/邀请/允许”,
{
数据:函数(){
返回{
主机:$(“#主机”).val(),
电子邮件:$('#email').val();
};
}
}
);
除了销毁异步验证器并在每次相关表单值更改时重新创建它之外,我看不到任何其他方法

注意两件事:(1)函数替换数据,而不是添加到数据中,(2)如果任何相关输入发生变化,您似乎需要进行异步验证。

欧芹似乎没有完全解决问题。它允许您在
addAsyncValidator()
调用中指定ajax选项,但这些选项在调用时进行评估,而不是在发出ajax请求时进行评估(例如,ajax
data
选项在页面加载时填充一次),因此请求中传递的任何其他表单值都不是“活动的”它们是调用
addAsyncValidator()
时的值。似乎我们需要能够为
数据
参数指定一个函数。我对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>

window.Parsley.addAsyncValidator(
“邀请”,
函数(xhr){
返回xhr.status==200;
},
“/邀请/允许”,
{
数据:函数(){
返回{
主机:$(“#主机”).val(),
电子邮件:$('#email').val();
};
}
}
);
除了销毁异步验证器并在每次相关表单值更改时重新创建它之外,我看不到任何其他方法


注意两件事:(1)函数替换数据,而不是添加数据,(2)如果任何相关输入发生更改,您似乎需要执行异步验证。

谢谢jsnandrew,我确实看到了该请求。看来它会成功的。谢谢jsnandrew,我确实看到了这个请求。看来它会成功的。