0

我一直在尝试添加两个用户(一次一个),然后使用条带付款。我原本以为问题出在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() 函数添加的。

4

0 回答 0