Интеграция формы регистрации AJAX Mailchimp
есть ли способ интегрировать mailchimp simple (один вход электронной почты) с AJAX, поэтому нет обновления страницы и перенаправления на страницу mailchimp по умолчанию.
Это решение не работает jQuery Ajax POST не работает с MailChimp
спасибо
8 ответов:
вам не нужен ключ API, все, что вам нужно сделать, это плюхнуть стандартную форму MailChimp сгенерированную в ваш код ( настроить внешний вид по мере необходимости ) и в формах "действие" изменить атрибут
post?u=доpost-json?u=и затем в конце действия формы добавить&c=?чтобы обойти любую проблему кросс-домена. Также важно отметить, что при отправке формы вы должны использовать GET, а не POST.ваш тег формы будет выглядеть примерно так по умолчанию:
<form action="http://xxxxx.us#.list-manage1.com/subscribe/post?u=xxxxx&id=xxxx" method="post" ... >изменить его, чтобы выглядеть примерно так
<form action="http://xxxxx.us#.list-manage1.com/subscribe/post-json?u=xxxxx&id=xxxx&c=?" method="get" ... >Mail Chimp вернет объект json, содержащий 2 значения:' result ' - это укажет, был ли запрос успешным или нет ( я только когда - либо видел 2 значения, "ошибка" и "успех" ) и' msg ' - сообщение, описывающее результат.
Я представляю свои формы с этим немного jQuery:
$(document).ready( function () { // I only have one form on the page but you can be more specific if need be. var $form = $('form'); if ( $form.length > 0 ) { $('form input[type="submit"]').bind('click', function ( event ) { if ( event ) event.preventDefault(); // validate_input() is a validation function I wrote, you'll have to substitute this with your own. if ( validate_input($form) ) { register($form); } }); } }); function register($form) { $.ajax({ type: $form.attr('method'), url: $form.attr('action'), data: $form.serialize(), cache : false, dataType : 'json', contentType: "application/json; charset=utf-8", error : function(err) { alert("Could not connect to the registration server. Please try again later."); }, success : function(data) { if (data.result != "success") { // Something went wrong, do something to notify the user. maybe alert(data.msg); } else { // It worked, carry on... } } }); }
основываясь на ответе gbinflames, я сохранил сообщение и URL-адрес, чтобы форма продолжала работать для тех, у кого JS выключен.
<form class="myform" action="http://XXXXXXXXXlist-manage2.com/subscribe/post" method="POST"> <input type="hidden" name="u" value="XXXXXXXXXXXXXXXX"> <input type="hidden" name="id" value="XXXXXXXXX"> <input class="input" type="text" value="" name="MERGE1" placeholder="First Name" required> <input type="submit" value="Send" name="submit" id="mc-embedded-subscribe"> </form>затем, используя jQuery .submit () изменил тип и URL для обработки JSON repsonses.
$('.myform').submit(function(e) { var $this = $(this); $.ajax({ type: "GET", // GET & url for json slightly different url: "http://XXXXXXXX.list-manage2.com/subscribe/post-json?c=?", data: $this.serialize(), dataType : 'json', contentType: "application/json; charset=utf-8", error : function(err) { alert("Could not connect to the registration server."); }, success : function(data) { if (data.result != "success") { // Something went wrong, parse data.msg string and display message } else { // It worked, so hide form and display thank-you message. } } }); return false; });
вы должны используйте код на стороне сервера для защиты вашей учетной записи MailChimp.
ниже приведена обновленная версия этот ответ, который использует PHP:
файлы PHP "защищены" на сервере, где пользователь никогда не видит их, но jQuery все еще может получить доступ и использовать.
1) Загрузите пример PHP 5 jQuery здесь...
http://apidocs.mailchimp.com/downloads/mcapi-simple-subscribe-jquery.zip
если у вас есть только PHP 4, просто скачайте версию 1.2 MCAPI и замените соответствующий выше.
http://apidocs.mailchimp.com/downloads/mailchimp-api-class-1-2.zip
2) следуйте инструкциям в файле Readme, добавив свой ключ API и идентификатор списка в
store-address.phpфайл в правильном места.3) Вы также можете собрать имя пользователя и/или другой информации. Вы должны добавить массив в
store-address.phpфайл с использованием соответствующих переменных слияния.вот какой мой
store-address.phpфайл выглядит так, где я также собираю имя, фамилию и тип электронной почты:<?php function storeAddress(){ require_once('MCAPI.class.php'); // same directory as store-address.php // grab an API Key from http://admin.mailchimp.com/account/api/ $api = new MCAPI('123456789-us2'); $merge_vars = Array( 'EMAIL' => $_GET['email'], 'FNAME' => $_GET['fname'], 'LNAME' => $_GET['lname'] ); // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/ // Click the "settings" link for the list - the Unique Id is at the bottom of that page. $list_id = "123456a"; if($api->listSubscribe($list_id, $_GET['email'], $merge_vars , $_GET['emailtype']) === true) { // It worked! return 'Success! Check your inbox or spam folder for a message containing a confirmation link.'; }else{ // An error ocurred, return error message return '<b>Error:</b> ' . $api->errorMessage; } } // If being called via ajax, autorun the function if($_GET['ajax']){ echo storeAddress(); } ?>4) Создайте свою форму HTML / CSS / jQuery. Это не обязательно должно быть на странице PHP.
здесь что-то вроде того, что мой выглядит например:
<form id="signup" action="index.html" method="get"> <input type="hidden" name="ajax" value="true" /> First Name: <input type="text" name="fname" id="fname" /> Last Name: <input type="text" name="lname" id="lname" /> email Address (required): <input type="email" name="email" id="email" /> HTML: <input type="radio" name="emailtype" value="html" checked="checked" /> Text: <input type="radio" name="emailtype" value="text" /> <input type="submit" id="SendButton" name="submit" value="Submit" /> </form> <div id="message"></div> <script src="jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { $('#signup').submit(function() { $("#message").html("<span class='error'>Adding your email address...</span>"); $.ajax({ url: 'inc/store-address.php', // proper url to your "store-address.php" file data: $('#signup').serialize(), success: function(msg) { $('#message').html(msg); } }); return false; }); }); </script>требуются куски...
.HTML-код построенный как выше или подобный. С jQuery, внешний вид и варианты бесконечны.
магазин-адрес.php файл загружен как часть примеров PHP на сайте Mailchimp и изменен с помощью вашего API KEY и СПИСОК ID. Вам нужно добавить другие необязательные поля в поле матрица.
MCAPI.класс.php файл, загруженный с сайта Mailchimp (версия 1.3 для PHP 5 или версия 1.2 для PHP 4). Поместите его в тот же каталог, что и ваш магазин-адрес.php или вы должны обновить путь url в пределах магазин-адрес.php так что он может найти его.
основываясь на ответе gbinflames, это то, что сработало для меня:
создайте простую форму регистрации списка mailchimp, скопируйте URL-адрес действия и метод (post) в свою пользовательскую форму. Также переименуйте имена полей формы во все заглавные (name= 'EMAIL' как в исходном коде mailchimp, EMAIL,FNAME,LNAME,... ), то используйте это:
$form=$('#your-subscribe-form'); // use any lookup method at your convenience $.ajax({ type: $form.attr('method'), url: $form.attr('action').replace('/post?', '/post-json?').concat('&c=?'), data: $form.serialize(), timeout: 5000, // Set timeout value, 5 seconds cache : false, dataType : 'jsonp', contentType: "application/json; charset=utf-8", error : function(err) { // put user friendly connection error message }, success : function(data) { if (data.result != "success") { // mailchimp returned error, check data.msg } else { // It worked, carry on... } }
использовать jquery.ajaxchimp плагин для достижения этой цели. Это очень просто!
<form method="post" action="YOUR_SUBSCRIBE_URL_HERE"> <input type="text" name="EMAIL" placeholder="e-mail address" /> <input type="submit" name="subscribe" value="subscribe!" /> <p class="result"></p> </form>JavaScript:
$(function() { $('form').ajaxChimp({ callback: function(response) { $('form .result').text(response.msg); } }); })
Что касается этой даты (февраль 2017 года), похоже, что mailchimp интегрировал что-то похожее на то, что предлагает gbinflames в свою собственную форму javascript.
теперь вам не нужно никакого дальнейшего вмешательства, так как mailchimp преобразует форму в ajax, отправленную при включении javascript.
все, что вам нужно сделать сейчас, это просто вставить сгенерированную форму из меню embed в вашу html-страницу и не изменять и не добавлять какой-либо другой код.
этот просто работать. Спасибо MailChimp!
для тех, кто ищет решение на современном стеке:
import jsonp from 'jsonp'; import queryString from 'query-string'; // formData being an object with your form data like: // { EMAIL: '[email protected]' } jsonp(`//YOURMAILCHIMP.us10.list-manage.com/subscribe/post-json?u=YOURMAILCHIMPU&${queryString.stringify(formData)}`, { param: 'c' }, (err, data) => { console.log(err); console.log(data); });
Comments