MailChimp API& AJAX添加隐藏字段

时间:2016-04-13 13:30:52

标签: ajax forms mailchimp hidden-field

我目前在我们网站的页脚中只有一个简单的简报订阅表单,只有一个电子邮件文本字段。我们想知道订阅者填写表格的语言版本。 (domain.com/nl /。 de /。 it 等)。

我添加了一个隐藏字段,可以获取当前语言的值。

    <li>
    <label for="footer-newsletter-input"><?php __("nav.newsletter.youremail"); ?></label>
    <input type="text" id="footer-newsletter-input" class="font-MuseoSans100 validate" data-validationtype="email">
     </li>

     <li class="hidden">
     <input type="text" id="footer-newsletter-input-language" class="font-MuseoSans100" value="<?php echo isset(Language::$short) ? Language::$short : 'en'; ?>">
     </li>

这是有效的。

我们当前的initNewsletter:function()如下:

    initNewsletter: function() {

        $(document).on('submit', '#newsletter_form', function(e){

            e.preventDefault();
            $('#newsletter-holder p.error').hide();

            if($(this).hasClass('loading')) return;

            var form = $(this),
                valid = checkForm(form),
                email = $('#footer-newsletter-input').val();
            ??? shortlangcode = $('#footer-newsletter-input-language'); ???



            if(valid) {

                form.addClass('loading');

                $.ajax({
                    type: 'post',
                    url: '/support/subscribe',
                    data: 'email=' + email, ??????
                    success: function(data){

                        form.removeClass('loading');

                        data = $.parseJSON(data);
                        if(data.status && data.status === 'error') {
                           $('#newsletter-holder').append('<p class="error font-MuseoSans100">' + window.globalTranslations.newsletter_error + '</p>');
                        } else {
                           $('#newsletter-inputs').fadeOut(150, function(){
                               $('#newsletter-thanks').show();
                           });

                        }


                    },
                    error: function(){
                        $('#newsletter-holder').append('<p class="error font-MuseoSans100">' + window.globalTranslations.newsletter_error + '</p>');
                    }
                });

            }

        });

    },

控制器如下所示:

    public function subscribe() {

    // API KEY
    $apikey = '????';
    $listid = '????';

    $MailChimp = new MailChimp($apikey);
    $result = $MailChimp->call('lists/subscribe', array(
        'id'                => $listid,
        'email'             => array('email'=>$_POST['email']),
        //'merge_vars'        => array('FNAME'=>$_POST['fname'], 'LNAME'=>$_POST['lname']),
        'double_optin'      => true,
        'update_existing'   => true,
        'replace_interests' => false,
        'send_welcome'      => false,
    ));

    echo json_encode($result);

}

1 个答案:

答案 0 :(得分:0)

您需要在表单字段中添加name参数。所以它可能会变成这样:

<input type="text" id="footer-newsletter-input-language" name="language" class="font-MuseoSans100" value="<?php echo isset(Language::$short) ? Language::$short : 'en'; ?>">

然后在您的控制器中,您可以像这样访问它:

$result = $MailChimp->call('lists/subscribe', array(
    'id'                => $listid,
    'email'             => array('email'=>$_POST['email']),
    'merge_vars'        => array('CNTRCODE'=>$_POST['language']),
    'double_optin'      => true,
    'update_existing'   => true,
    'replace_interests' => false,
    'send_welcome'      => false,
));

您必须确保在mailchimp中为该列表创建名为CNTRCODE的合并字段。