我正在进行AJAX表单验证。这里的逻辑是,首先将所有字段都发送到服务器,如果它响应“确定”,则表单提交将通过submit()
函数进行。
验证成功存储在validate
隐藏的输入中。一切都很好,脚本会询问服务器,然后按validated
打印console.log
,但不会提交表单。我用Google搜索了e.returnValue = true;
的把戏,但没有帮助。
$(document).ready(function() {
$('form.validate').on('submit', function(e) {
var $form = $(this);
var $submit = $form.find('input[type=submit]');
var $validate = $form.find('input[name=_validate]');
if ($validate.length > 0 && $validate.val() == 'success') { // already validated
e.returnValue = true;
console.log('validated');
return true; // submit form
}
e.preventDefault();
if ($validate.length == 0)
$form.append('<input type="hidden" name="_validate" value="asking" />');
$validate = $form.find('input[name=_validate]');
var params = $form.serialize();
$.ajax({
url: $form.attr('action'),
method: 'post',
data: params
}).then(function(response, statusText, xhrObj) {
var json = JSON.parse(response);
if (json._status != 'ok') {
// print errors
} else {
$validate.val('success');
$form.submit();
}
}).catch(function(data) {
alert('Error occured');
});
});
});