1

任何人都可以为我提供任何帮助或建议来调试此问题吗?

我有一个POST邮寄给 MailChimp 的表格:

<form id="mailchimp_signup" action="http://MY_MC_ACCT.us2.list-manage.com/subscribe/post" method="POST">
...
<input type="submit" class="button" name="submit" value="Subscribe to list">
...

但是,如果满足某些条件(选中的复选框),我需要此表单发送额外的电子邮件:

$('input[type=submit]').click(function(e){
    if( $('input[name="more_info"]:checked').val() && !$('#mailchimp_signup').hasClass('success') ){
        e.preventDefault();
        $.post("../process_email_form.php", $('#mailchimp_signup').serialize(), function(){
            alert('posted');
            $('#mailchimp_signup').submit();
        });
    }            
});

发生了什么:

  • process_email_form.php工作正常,并发送电子邮件。

  • 正在触发alert('posted')

  • 不幸的是,我似乎无法将表单提交给 MailChimp。警报触发,但什么也没有……我在控制台中看不到任何错误。

  • 由于某种原因,直接在控制台中输入$('#mailchimp_signup').submit();甚至不会将表单发布到 MailChimp

更多背景

这实际上是我写的关于这个问题的第三个问题。起初我试图用 cURL 解决它,但这似乎是错误的方法。以供参考:

  1. 在从表单发布到其他人的脚本之前如何执行 php?
  2. 使用 cURL 将表单发布到两个地方
4

1 回答 1

2

您可以在第一个请求完成后务实地提交表单。

$('input[type=submit]').click(function(e){
        if( $('input[name="more_info"]:checked').val() && !$('#mailchimp_signup').hasClass('success') ){
            e.preventDefault();
            $.post("../process_email_form.php", $('#mailchimp_signup').serialize(), function(){
                alert('posted');
                $.post($('#mailchimp_signup').attr('action'),$('#mailchimp_signup').serialize(),function(html){
                    //do something with the result eg. $(document).html(html);
                });
            });
        }            
    });

或者您可以在没有异步的情况下运行第一个请求,这将锁定浏览器,直到 ajax 请求完成。

$('input[type=submit]').click(function(e){
    if( $('input[name="more_info"]:checked').val() && !$('#mailchimp_signup').hasClass('success') ){
        $.ajax({
            url:"../process_email_form.php", 
            data:$('#mailchimp_signup').serialize(),
            type:'POST',
            async:false
        });
    }            
});
于 2012-09-04T19:25:53.357 回答