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

除了MailChimp之外,如何将表单发布到自定义php脚本,php,jquery,forms,post,mailchimp,Php,Jquery,Forms,Post,Mailchimp,有人能为我调试这个问题提供帮助或建议吗 我有一个表单,将发布到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"> ... $('in

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

我有一个表单,
发布到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();
        });
    }            
});
发生了什么事:

<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\u email\u form.php
    工作正常,可以发送电子邮件

  • 警报('posted')
    正在触发

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

  • 键入
    $('mailchimp_signup')。提交()甚至不会将表单发布到MailChimp

更多背景信息

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


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

    $('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);
                    });
                });
            }            
        });
    
    $('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
            });
        }            
    });
    
    或者您可以在不使用异步的情况下运行第一个请求,这将锁定浏览器,直到ajax请求完成

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

    谢谢那么,第一个选项看起来会在幕后提交给MailChimp?我需要它去他们的成功(或验证)页面。我尝试了第二个选项,它似乎起了作用-除了某些原因,帖子数据不会像我原来的代码那样发送到电子邮件表单。它现在给我发了一封空白的电子邮件。你是对的。这是已知的,你必须使用第二个。它将在处理第一个请求时锁定浏览器。在第一个请求运行时,我会显示一些加载对话框。上面我的代码有问题,所以流程\u电子邮件\u表单填写正确(只是没有发布到MC)。使用您的代码(第二个)时,它确实会转到MC和我的脚本,但我的脚本没有看到POST数据(
    print\r($\u POST,TRUE);
    返回
    array()
    )。尝试在其中抛出一个e.preventDefault,看看它是否仍然没有发布数据。据我所知,它应该会起作用。可以尝试将变量设置为serialize(),
    var data=$(“#mailchimp_signup”).serialize()方法更改为
    类型。我正在上面的答案中修正它。