parsley.jsリモート検証応答はまだparsleyui.adderrorの後にtrueを検証します
-
21-12-2019 - |
質問
私はこの形式を持っています:
<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>
.
とスクリプト:
var userName = $('#userName').parsley();
var _xsrf = $("[name='_xsrf']").val();
$('#myForm').parsley()
.addAsyncValidator('validateName', function(xhr) {
window.ParsleyUI.removeError(userName, 'name-exists');
if (xhr.status == '404') {
window.ParsleyUI.addError(userName, 'name-exists', "Name already exists.");
return 404;
} else if (xhr.status == '200') {
return 200;
}
}, '/validate/?country=' + country + '&_xsrf=' + _xsrf);
.
ユーザーが既に存在する場合はエラーメッセージが正しく表示されますが、フィールドはまだ正しいと検証されています。
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>
.
submit
をボタンの名前として設定することをお勧めします。 この回答と
return xhr.status === 200
.
ステータス応答が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();
});
.
フルコードのjsfiddle 。サーバー要求を実行しなければならないので、(アクセス制御許可原点のため)という形式は決して検証されません。ただし、このローカルに有効な要求でこれをテストした場合は機能します。
所属していません StackOverflow