除MailChimp外,如何将表单发布到自定义php脚本

时间:2012-09-04 18:42:12

标签: php jquery forms post 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工作正常,并发送电子邮件。

  • alert('posted') 触发。

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

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

更多背景

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

  1. How can I execute php before posting to someone elses script from a form?
  2. Using cURL to POST form to two places

1 个答案:

答案 0 :(得分: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
        });
    }            
});