Tích hợp biểu mẫu đăng ký AJAX Mailchimp


122

Có cách nào để tích hợp mailchimp đơn giản (một đầu vào email) với AJAX, vì vậy không có làm mới trang và không chuyển hướng đến trang mailchimp mặc định.

Giải pháp này không hoạt động jQuery Ajax POST không hoạt động với MailChimp

Cảm ơn


sau khi gửi biểu mẫu, nó chuyển hướng đến trang mailchimp "xác nhận".
alexndm

3
giải pháp của bạn có lỗ hổng bảo mật lớn, khóa API phải được coi là riêng tư vì nó cung cấp toàn quyền truy cập vào tài khoản MailChimp của bạn. #justsaying

1
Giải pháp đó cho thấy nhiều API MailChimp của bạn mà không phải là một ý tưởng tốt
Ruairi Browne

3
Không phải tùy chọn nhúng HTML mặc định trên trang web của mailchimp có làm lộ khóa api của bạn không? Giải pháp đó không thể tốt hơn hay tệ hơn.
Bob Bobbio

Sử dụng plugin jquery này: github.com/scdoshi/jquery-ajaxchimp
sid

Câu trả lời:


241

Bạn không cần khóa API, tất cả những gì bạn phải làm là đưa biểu mẫu đã tạo mailchimp tiêu chuẩn vào mã của bạn (tùy chỉnh giao diện nếu cần) và trong biểu mẫu, thuộc tính "hành động" thay đổi post?u=thành post-json?u=và sau đó ở cuối biểu mẫu hành động chắp thêm &c=?để giải quyết mọi vấn đề tên miền chéo. Ngoài ra, điều quan trọng cần lưu ý là khi bạn gửi biểu mẫu, bạn phải sử dụng GET thay vì POST.

Thẻ biểu mẫu của bạn sẽ trông giống như thế này theo mặc định:

<form action="http://xxxxx.us#.list-manage1.com/subscribe/post?u=xxxxx&id=xxxx" method="post" ... >

thay đổi nó để trông giống như thế này

<form action="http://xxxxx.us#.list-manage1.com/subscribe/post-json?u=xxxxx&id=xxxx&c=?" method="get" ... >

Mail Chimp sẽ trả về một đối tượng json chứa 2 giá trị: 'result' - điều này sẽ cho biết yêu cầu có thành công hay không (tôi mới chỉ thấy 2 giá trị, "error" và "success") và 'msg' - một thông báo mô tả kết quả.

Tôi gửi biểu mẫu của mình với một chút jQuery này:

$(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
Tôi đã thực hiện một jquery-cắm sử dụng phương pháp này: github.com/scdoshi/jquery-ajaxchimp
SID

22
Bạn cũng có thể sử dụng JSONP. Sử dụng post-jsonnhư mô tả. Loại bỏ &c=nếu bạn có nó trong url hành động biểu mẫu. Sử dụng dataType: 'jsonp'jsonp: 'c'cho cuộc gọi ajax jQuery của bạn.
czerasz

5
Lưu ý rằng các trường của biểu mẫu email phải có name = "EMAIL" để mailchimp xử lý
Ian Warner

5
Chỉ FYI trong trường hợp bất kỳ ai gặp sự cố, tên của thông số email phải là EMAIL(viết hoa toàn bộ). Nếu không, bạn sẽ gặp lỗi thông báo rằng địa chỉ email trống.
Nick Tiberi

5
MailChimp có vô hiệu hóa phương pháp truy cập API này kể từ khi câu trả lời này được viết không? Tôi không thấy dấu hiệu nào trong tài liệu rằng GET / POST không có khóa API có thể đăng ký người dùng vào danh sách.
Greg Bell,

34

Dựa trên câu trả lời của gbinflames, tôi đã giữ lại ĐĂNG và URL, để biểu mẫu này sẽ tiếp tục hoạt động đối với những người đã tắt 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>

Sau đó, bằng cách sử dụng .submit () của jQuery đã thay đổi kiểu và URL để xử lý các đại diện 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

Bạn nên sử dụng mã phía máy chủ để bảo mật tài khoản MailChimp của mình.

Sau đây là phiên bản cập nhật của câu trả lời này sử dụng PHP :

Các tệp PHP được "bảo mật" trên máy chủ mà người dùng không bao giờ nhìn thấy chúng nhưng jQuery vẫn có thể truy cập và sử dụng.

1) Tải xuống ví dụ jQuery PHP 5 tại đây ...

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

Nếu bạn chỉ có PHP 4, chỉ cần tải xuống phiên bản 1.2 của MCAPI và thay thế MCAPI.class.phptệp tương ứng ở trên.

http://apidocs.mailchimp.com/downloads/mailchimp-api-class-1-2.zip

2) Làm theo hướng dẫn trong tệp Readme bằng cách thêm khóa API và ID danh sách của bạn vào store-address.phptệp tại các vị trí thích hợp.

3) Bạn cũng có thể muốn thu thập tên người dùng và / hoặc thông tin khác. Bạn phải thêm một mảng vào store-address.phptệp bằng các Biến Hợp nhất tương ứng.

Đây là store-address.phptệp của tôi trông như thế nào, nơi tôi cũng thu thập tên, họ và loại email:

<?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) Tạo biểu mẫu HTML / CSS / jQuery của bạn. Nó không bắt buộc phải ở trên một trang PHP.

Đây là một cái gì đó giống như index.htmltệp của tôi trông như thế nào:

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

Các mảnh bắt buộc ...

  • index.html được xây dựng như trên hoặc tương tự. Với jQuery, sự xuất hiện và các tùy chọn là vô tận.

  • Tệp store-address.php được tải xuống dưới dạng một phần của các ví dụ PHP trên trang Mailchimp và được sửa đổi bằng API KEYID LIST của bạn . Bạn cần thêm các trường tùy chọn khác của mình vào mảng.

  • Tệp MCAPI.class.php tải xuống từ trang Mailchimp (phiên bản 1.3 cho PHP 5 hoặc phiên bản 1.2 cho PHP 4). Đặt nó trong cùng thư mục với store-address.php của bạn hoặc bạn phải cập nhật đường dẫn url trong store-address.php để nó có thể tìm thấy nó.


2
Nếu bạn chỉ muốn thêm biểu mẫu đăng ký vào trang web của mình và gửi qua AJAX, câu trả lời của @ gbinflames sẽ hoạt động. Chỉ cần thử nó bản thân mình.
Patrick Canfield

1
Không, không cần phải thế .
Nowaker

2
Khỉ thật, tôi phải nói - Tôi đã triển khai câu trả lời của @ skube một thời gian trước trên một trang web và sau đó thêm https trên toàn trang web. Bây giờ mới phát hiện ra rằng nó không hoạt động với lệnh gọi http AJAX trong mailchimp. Thực sự khuyên bạn nên sử dụng phương pháp này ngay lập tức nếu trang web của bạn có thể cần hoặc cân nhắc sử dụng SSL.
squarecandy

12

Đối với bất kỳ ai đang tìm kiếm giải pháp trên một ngăn xếp hiện đại:

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

Dựa trên câu trả lời của gbinflames, đây là điều phù hợp với tôi:

Tạo một biểu mẫu đăng ký danh sách mailchimp đơn giản, sao chép URL hành động và phương pháp (đăng) vào biểu mẫu tùy chỉnh của bạn. Ngoài ra, đổi tên các tên trường biểu mẫu của bạn thành tất cả các tên viết hoa (name = 'EMAIL' như trong mã mailchimp gốc, EMAIL, FNAME, LNAME, ...), sau đó sử dụng:

      $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

Đối với ngày này (tháng 2 năm 2017), có vẻ như mailchimp đã tích hợp một cái gì đó tương tự như những gì gbinflames gợi ý vào biểu mẫu được tạo javascript của riêng họ.

Bây giờ bạn không cần can thiệp thêm vì mailchimp sẽ chuyển biểu mẫu thành ajax được gửi khi javascript được bật.

Tất cả những gì bạn cần làm bây giờ chỉ là dán biểu mẫu đã tạo từ menu nhúng vào trang html của bạn và KHÔNG sửa đổi hoặc thêm bất kỳ mã nào khác.

Điều này chỉ đơn giản là hoạt động. Cảm ơn MailChimp!


4
Sẽ thực sự hữu ích nếu bạn có thể thêm một số liên kết bài viết / bài đăng blog để làm điều tương tự
gonephishing

Tôi đã thêm mã nhúng Mailchimp vào trang html của mình nhưng Ajax không tự động hoạt động như đề xuất ở trên. Tôi được chuyển hướng đến một trang khác. Làm thế nào tôi có thể làm cho việc này hoạt động mà không cần chuyển hướng?
Petra

1
Trong quản trị viên MailChimp, hãy chuyển đến danh sách của bạn -> Biểu mẫu đăng ký -> Biểu mẫu nhúng -> Cổ điển. Bạn sẽ thấy rằng có một số JS được bao gồm trong đoạn mã. Điều này sẽ cho phép xác thực biểu mẫu và gửi AJAX.
MarcGuay

1
bằng cách sử dụng mã mailchimp - làm cách nào để tôi cắm một hành động tùy chỉnh để ajax thành công? [giống như ẩn biểu mẫu]
Adeerlike

1
@Masiorama Tôi đã chọn xóa tập lệnh mc-validate vì nó cũng chứa một jquery cũ và quá lớn và dễ bị tấn công. vì vậy chỉ cần có xác nhận html và trình với ajax như trong stackoverflow.com/a/15120409/744690
Adeerlike

4

Sử dụng plugin jquery.ajaxchimp để đạt được điều đó. Thật dễ chết!

<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);
    }
  });
})

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.