Javascript Parsley.js远程验证响应在ParsleyUI.addError之后仍然验证为true

Javascript Parsley.js远程验证响应在ParsleyUI.addError之后仍然验证为true,javascript,parsley.js,Javascript,Parsley.js,我有以下表格: <form method="post" id="myForm" data-parsley-validate> <input type="text" name="firstName" id="firstName" required> <input type="text" name="lastName" id="lastName" required> <input type="text" name="userName" id="userNam

我有以下表格:

<form method="post" id="myForm" data-parsley-validate>
<input type="text" name="firstName" id="firstName" required>
<input type="text" name="lastName" id="lastName" required>
<input type="text" name="userName" id="userName" 
            data-parsley-trigger="focusout" 
            data-parsley-remote
            data-parsley-remote-options='{ "type": "POST" }'
            data-parsley-remote-validator='validateName'
            required>
<input type="button" id="formSave" name="submit" value="Next">
</form>
如果用户已存在,则会正确显示错误消息,但该字段仍被验证为正确


在Parsley.js的v1中,这样做非常简单:/

我对您的html和js做了一些更改:

<form method="post" id="myForm">
    <input type="text" name="_xsrf" id="_xsrf" value="test">
    <input type="text" name="userName" id="userName" 
            data-parsley-trigger="focusout"
            data-parsley-remote
            data-parsley-remote-options='{ "type": "POST" }'
            data-parsley-remote-validator="validateName"
            data-parsley-remote-message="Name already exists."
            required>
    <!--<input type="button" id="formSave" name="submit" value="Next">-->
    <input type="submit" id="formSave" name="formSave" value="Next">
</form>
如果假设当状态响应为
404
时该字段有效,则应使用:

return xhr.status === 404
这是为我工作的代码。如果使用返回
404
状态代码的有效URL,则将显示错误,并且表单将不会被验证

var _xsrf = $("#_xsrf").val();
var userName = $("#userName").parsley()
    .addAsyncValidator('validateName', function (xhr) {
         return xhr.status === 200;
    }, 'http://localhost/parsley/CheckEmailAvailability.php?_xsrf=' + _xsrf);

$( "#myForm" ).parsley();

$("#myForm" ).submit(function( event ) {
    $(this).parsley("validate");
    if ($(this).parsley("isValid")) {
        console.log('valid');
    }
    event.preventDefault();
});

有关完整代码,请参阅。由于您必须执行服务器请求,因此表单将永远不会被验证(由于访问控制允许来源)。但是,如果您使用有效的请求在本地进行测试,它将起作用。

其行为方式相同。出现错误,但整个表单仍然有效。我将编辑我的问题,以便在表单中包含其他输入。我已编辑了我的答案,并对您的HTML和JS进行了一些更改。我测试了这个,效果很好。请让我知道这是否解决了您的问题。这仍然具有相同的行为。我读到@guillaumepotier说“
ParsleyUI.addError()
只处理接口,而不是验证本身。”需要使用类似于
parsley:form:validate
的事件。但我还是迷路了:/I我以为你在验证表单。我编辑了答案,以便添加验证表单的表单提交事件。我还添加了一个JSFIDLE,由于跨源请求,它永远不会提交表单)。但是,如果您在本地执行代码并提供一个有效的URL,这应该会起作用。先生/女士,您太棒了。非常感谢你。这真是太棒了。我希望我能给你全世界的选票。首先为没有正确表达问题而道歉。
return xhr.status === 404
var _xsrf = $("#_xsrf").val();
var userName = $("#userName").parsley()
    .addAsyncValidator('validateName', function (xhr) {
         return xhr.status === 200;
    }, 'http://localhost/parsley/CheckEmailAvailability.php?_xsrf=' + _xsrf);

$( "#myForm" ).parsley();

$("#myForm" ).submit(function( event ) {
    $(this).parsley("validate");
    if ($(this).parsley("isValid")) {
        console.log('valid');
    }
    event.preventDefault();
});