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
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
Câu trả lời:
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...
}
}
});
}
post-json
như 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'
và jsonp: 'c'
cho cuộc gọi ajax jQuery của bạn.
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.
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;
});
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.php
tệ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.php
tệ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.php
tệp bằng các Biến Hợp nhất tương ứng.
Đây là store-address.php
tệ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! 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) 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.html
tệ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 KEY và ID 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ó.
Đố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);
});
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...
}
}
Đố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!
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);
}
});
})
Mặt khác, có một số gói trong AngularJS rất hữu ích (trong AJAX WEB):