我一直在尝试添加两个用户(一次一个),然后使用条带付款。我原本以为问题出在ajax是异步的,同时发布两个用户表单,但现在我相信是因为当我得到操作的响应时,认为ajax操作已经完成,它会移动到其他操作。
响应带有验证错误,我正在使用 jQuery 函数将错误添加到表单中,并且在修复错误之前不会提交该表单。
这是一个主要问题,因为这两个用户将通过 group_id 链接,该 group_id 的值与主用户(用户 #1)的 id 相同。如果用户 #1 有验证错误而用户 #2 没有,则用户 #2 会被添加,因此无法链接到用户 #1 的 id 值,因为它还不存在。
我可以解决每个用户表单上的隐藏表单字段,该表单字段具有 group_id 的匹配值,然后在添加用户 #1 后更新数据,但我希望能够在 ajax 操作之前检查错误响应完成了。有没有办法做到这一点?
我的 Ajax 函数:
function submitFormAjax(formData) {
if (formData.length) {
var formId = formData.attr('id');
if ( $('#'+formId ).hasClass('disabled') ) {
console.log('form is disabled don\'t post data');
} else {
return $.ajax({
type: formData.attr('method'),
url: formData.attr('action'),
data: formData.serialize(),
beforeSend: function(xhr) {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
})
.done( function( data ) {
addFormErrors(formId, data);
})
.fail(function( data ) {
console.log('user\(s\) could not be added');
console.log( data );
});
}
}
}
提交表格功能:
function submitAllForms() {
// wait until both of the other forms' data are submitted
$.when( submitFormAjax($('#userForm')), submitFormAjax($('#secondUserForm')) ).then(
function() {
if ( $('.error-message').length ) {
$form.find('button').prop('disabled', false);
} else {
$('#payment-form').get(0).submit();
}
});
}
我认为您不需要查看添加错误的功能,因为该功能可以正常工作。只要知道它们是通过 addFormErrors() 函数添加的。