Інтеграція форми реєстрації 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.