2

sendPostAjax()单击表单 send_button后,我尝试使用该功能发送确认帖子,然后将表单提交给支付提供商。但是sendPostAjax()在点击之前,我在页面加载时执行了该功能。

我试图将sendPostAjax()函数放在点击捕获中,但是由于 sendPostAjax() 函数未定义,因此无法分配承诺。

有什么建议我应该如何解决这个问题?

HTML 表格

<form id="payment" method="post" action="https://my-payment-provider.com">
    <input type="hidden" name="charset" value="utf-8">
    // --- additional data here
    <button type="submit" name="submit" id="send_button">PAY</button>
</form>

JAVASCRIPT代码

<script type = "text/javascript">
    // Get click and call sendPostAjax function
    document.getElementById('send_button').addEventListener('click', function () {
        sendPostAjax();
        return false;
    });

    function sendPostAjax() {
        return $.ajax({
            url: 'confirm.php',
            type: 'POST',
            data: {
                cid: '9999999'
            }
        });
    }

    // function that expects a promise as an argument:
    function sendForm(x) {
        x.success(function () {
            $('#payment').submit;
        });
    }

    // get a promise from sendPostAjax:
    var promise = sendPostAjax();

    // give a promise to other function:
    sendForm(promise); 
</script>
4

2 回答 2

1

您可以使用jQuery按钮单击处理程序执行此操作,将您的代码替换为以下代码并尝试:

更新代码(表单提交后ajax success):

$('#send_button').click(function() {
    var form = $('#payment');
    if (form.attr('confirm') === undefined) {
        $.ajax({
            url: 'confirm.php',
            type: 'POST',
            data: {
                cid: '9999999'
            },
            success: function(data) {
                form.attr('confirm', '1');
                $('#send_button').click();
            }
        });
        return false;
    }

    return true;
});
于 2013-07-14T06:09:29.707 回答
0

这应该这样做......在你定义了这两个函数之后马上把它

   $('#send_button').click(function() {
    // get a promise from sendPostAjax:
    var promise = sendPostAjax();
    // give a promise to other function:
    sendForm(promise);
    });
于 2013-07-14T05:55:54.560 回答