除了MailChimp之外,我如何将我的表单发布到自定义php脚本中


How can I post my form to a custom php script in addition to MailChimp

有人能为我提供任何帮助或建议来调试这个问题吗?

我有一个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运行良好,正在发送电子邮件。

  • 则CCD_ 3触发。

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

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

更多背景

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

  1. 在从表单发布到其他人的脚本之前,我如何执行php
  2. 使用cURL将表单POST到两个位置

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

$('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);
                });
            });
        }            
    });

或者,您可以在没有async的情况下运行第一个请求,这将锁定浏览器,直到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
        });
    }            
});