Інтеграція форми реєстрації AJAX Mailchimp


122

Чи є можливість інтегрувати mailchimp просто (один вхід електронної пошти) з AJAX, тому немає оновлення сторінки та перенаправлення на сторінку mailchimp за замовчуванням.

Це рішення не працює jQuery Ajax POST не працює з MailChimp

Дякую


після надсилання форми він перенаправляє на сторінку "підтвердження" поштою.
alexndm

3
у вашому рішенні є величезна дірка безпеки, ключ API слід розглядати як приватний, оскільки він забезпечує повний доступ до вашого облікового запису MailChimp. #justsaying

1
Це рішення розкриває ваш API mailchimp, що не є хорошою ідеєю
Ruairi Browne

3
Чи не піддається встановленню HTML за умовчанням на веб-сайті mailchimp також ваш ключ api? Це не може бути ні кращим, ні гіршим, ніж це рішення.
Боб Боббіо

Використовуйте цей плагін jquery: github.com/scdoshi/jquery-ajaxchimp
sid

Відповіді:


241

Вам не потрібен ключ API, все, що вам потрібно зробити, - це вставити в свій код стандартну форму, створену mailchimp (налаштувати зовнішній вигляд) та змінити атрибут форм "action" 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 значення: 'результат' - це вкаже, чи був запит успішним чи ні (я бачив лише 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...
            }
        }
    });
}

8
Я зробив плагін jquery, який використовує цей метод: github.com/scdoshi/jquery-ajaxchimp
sid

22
Ви також можете використовувати JSONP. Використовуйте post-jsonяк описано. Видаліть, &c=якщо у вас є, у URL-адресі форми форми. Використовуйте dataType: 'jsonp'і jsonp: 'c'для вашого дзвінка jQuery ajax.
czerasz

5
Зауважте, що поля електронної пошти повинні мати ім'я = "EMAIL", щоб обробляти поштову пошту
Ian Warner

5
Тільки FYI, якщо у когось виникають проблеми, ім'я параметра електронної пошти має бути EMAIL(усі літери). Інакше ви отримаєте помилку про те, що адреса електронної пошти порожня.
Нік Тібері

5
Чи відключив MailChimp цей метод доступу до API з моменту написання цієї відповіді? Я не бачив в документації вказівки на те, що GET / POST без ключа API може підписати користувача на список.
Грег Белл

34

Виходячи з відповіді gbinflames, я зберігав POST та 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's .submit () змінив тип і URL для обробки JSON повторень.

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

18

Ви повинні використовувати код на сервері, щоб захистити свій обліковий запис MailChimp.

Далі йде оновлена ​​версія цієї відповіді, в якій використовується PHP :

Файли PHP "захищені" на сервері, де користувач ніколи їх не бачить, але jQuery все ще може отримати доступ та використовувати.

1) Завантажте приклад PHP 5 jQuery тут ...

http://apidocs.mailchimp.com/downloads/mcapi-simple-subscribe-jquery.zip

Якщо у вас є лише PHP 4, просто завантажте версію 1.2 MCAPI та замініть відповідний MCAPI.class.phpфайл вище.

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!&nbsp; Check your inbox or spam folder for a message containing a confirmation link.';
    }else{
        // An error ocurred, return error message   
        return '<b>Error:</b>&nbsp; ' . $api->errorMessage;
    }

}

// If being called via ajax, autorun the function
if($_GET['ajax']){ echo storeAddress(); }
?>

4) Створіть свою HTML / CSS / jQuery форму. Не потрібно знаходитись на сторінці PHP.

Ось щось на зразок того, index.htmlяк виглядає мій файл:

<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>

Обов’язкові шматки ...

  • index.html, побудований як вище або подібний. З jQuery зовнішній вигляд та варіанти нескінченні.

  • файл store-address.php, завантажений як частина прикладів PHP на сайті Mailchimp та модифікований вашим API KEY та ідентифікатором списку . Вам потрібно додати до масиву інші ваші необов’язкові поля.

  • Файл MCAPI.class.php, завантажений з сайту Mailchimp (версія 1.3 для PHP 5 або версія 1.2 для PHP 4). Помістіть його в той самий каталог, що і ваш store-address.php, або потрібно оновити шлях URL-адреси в store-address.php, щоб він міг його знайти.


2
Якщо ви просто хочете додати форму реєстрації на свій сайт і надіслати її через AJAX, відповідь @ gbinflames працює. Просто спробував сам.
Патрік Кенфілд

1
Ні, немає необхідності .
Nowaker

2
Лайно, я мушу сказати - я реалізував відповідь @ skube деякий час тому на сайті, а потім пізніше додав https на весь сайт. Щойно виявив, що він не працює з викликом mailchimp http AJAX. Настійно рекомендую скористатися цим методом відразу ж, якщо вам сайт може колись знадобитися або розглянути можливість використання SSL.
squarecandy

12

Для тих, хто шукає рішення на сучасному стеці:

import jsonp from 'jsonp';
import queryString from 'query-string';

// formData being an object with your form data like:
// { EMAIL: 'emailofyouruser@gmail.com' }

jsonp(`//YOURMAILCHIMP.us10.list-manage.com/subscribe/post-json?u=YOURMAILCHIMPU&${queryString.stringify(formData)}`, { param: 'c' }, (err, data) => {
  console.log(err);
  console.log(data);
});

6

На основі відповіді gbinflames, це те, що працювало для мене:

Створіть просту форму для реєстрації у списку пошт-шимп, скопіюйте URL-адресу дії та спосіб (пост) у вашу власну форму. Також перейменуйте назви своїх форм у весь капітал (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...
          }
      }

5

Що стосується цієї дати (лютий 2017 року), то, здається, що mailchimp інтегрував щось подібне до того, що пропонує gbinflames, у власну форму, створену javascript.

Вам не потрібно більше ніякого втручання, оскільки mailchimp перетворить форму в форму, подану в Ajax, коли включений javascript.

Все, що вам потрібно зробити зараз - це просто вставити створену форму з вбудованого меню на вашу сторінку html і НЕ змінювати і не додавати жодного іншого коду.

Це просто працює. Дякую MailChimp!


4
Це дійсно допоможе, якщо ви можете додати кілька посилань на статтю / повідомлення в блозі для того ж
gophishing

Я додав код вбудови Mailchimp на свою html-сторінку, але Ajax не працює автоматично, як було запропоновано вище. Мене переадресовують на іншу сторінку. Як я можу зробити цю роботу без перенаправлення?
Петра

1
У адміністраторі MailChimp перейдіть до свого списку -> Форми реєстрації -> Вбудовані форми -> Класика. Ви побачите, що в фрагменті коду є якийсь JS. Це дозволить перевірити форму та подати AJAX.
MarcGuay

1
використовуючи код mailchimp - як я можу підключити власну дію до успіху ajax? [як приховування форми]
Adeerlike

1
@Masiorama я вирішив видалити сценарій mc-validate, оскільки він також містив старий jquery і був занадто великим і вразливим. так просто з перевірки HTML і відправки з AJAX , як в stackoverflow.com/a/15120409/744690
Adeerlike

4

Для цього використовуйте плагін 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);
    }
  });
})

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.