javascript - AJAX Mailchimp-registreringsformulärsintegration
Finns det något sätt att integrera Mailchimp enkelt (endast en e-postinmatning) med AJAX, så att det inte blir någon siduppdatering och ingen omdirigering till standard Mailchimp-sida.
Denna lösning fungerar inte jQuery Ajax POST fungerar inte med MailChimp
Tack
Svar #1
Du behöver ingen API-nyckel, allt du behöver göra är att stoppa det standardformulär som Mailchimp genererat in i din kod (anpassa utseendet vid behov) och i formulärets "action"-attribut ändra post?u= till post-json?u= och sedan i slutet av formulärets action lägga till &c=? för att kringgå eventuella problem med cross-domain. Det är också viktigt att notera att när du skickar in formuläret måste du använda GET istället för POST.
Din formtagg kommer att se ut ungefär så här som standard:
<form action="http://xxxxx.us#.list-manage1.com/subscribe/post?u=xxxxx&id=xxxx" method="post" ... >
ändra det så att det ser ut ungefär så här
<form action="http://xxxxx.us#.list-manage1.com/subscribe/post-json?u=xxxxx&id=xxxx&c=?" method="get" ... >
Mail Chimp kommer att returnera ett JSON-objekt som innehåller 2 värden: 'result' - detta kommer att indikera om förfrågan var framgångsrik eller inte (Jag har bara sett 2 värden, "error" och "success") och 'msg' - ett meddelande som beskriver resultatet.
Jag skickar in mina formulär med detta lilla stycke 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...
}
}
});
}
Svar #2
Baserat på gbinflames svar, behöll jag POST och URL, så att formuläret fortsätter att fungera för dem som har JS avstängt.
<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>
Sedan, genom att använda jQuery:s .submit() ändrades typen och URL:en för att hantera JSON-svar.
$('.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;
});
Svar #3
För alla som letar efter en lösning på en modern stack:
import jsonp from 'jsonp';
import queryString from 'query-string';
// formData being an object with your form data like:
// { EMAIL: '[email ' }
jsonp(`//YOURMAILCHIMP.us10.list-manage.com/subscribe/post-json?u=YOURMAILCHIMPU&${queryString.stringify(formData)}`, { param: 'c' }, (err, data) => {
console.log(err);
console.log(data);
});
Svar #4
Du borde använda server-sidans kod för att säkra ditt MailChimp-konto.
Följande är en uppdaterad version av detta svar som använder PHP:
PHP-filerna är "säkrade" på servern där användaren aldrig ser dem men jQuery kan fortfarande komma åt och använda dem.
1) Ladda ner PHP 5 jQuery-exemplet här...
http://apidocs.mailchimp.com/downloads/mcapi-simple-subscribe-jquery.zip
Om du bara har PHP 4, ladda helt enkelt ner version 1.2 av MCAPI och ersätt motsvarande MCAPI.class.php-fil ovan.
http://apidocs.mailchimp.com/downloads/mailchimp-api-class-1-2.zip
2) Följ instruktionerna i Readme-filen genom att lägga till din API-nyckel och List-ID i filen store-address.php på rätt platser.
3) Du kanske också vill samla in dina användares namn och/eller annan information. Du måste lägga till en array i filen store-address.php med motsvarande Merge Variables.
Här är hur min store-address.php-fil ser ut där jag också samlar in förnamn, efternamn och e-posttyp:
<?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) Skapa ditt HTML/CSS/jQuery-formulär. Det behöver inte vara på en PHP-sida.
Här är något som liknar hur min index.html-fil ser ut:
<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>
Obligatoriska delar...
index.html konstruerad som ovan eller liknande. Med jQuery är utseendet och alternativen oändliga.
store-address.php filen laddades ner som en del av PHP-exempel på Mailchimp-sidan och modifierades med din API KEY och LIST ID. Du behöver lägga till dina andra valfria fält till arrayen.
MCAPI.class.php-filen laddades ner från Mailchimp-sidan (version 1.3 för PHP 5 eller version 1.2 för PHP 4). Placera den i samma katalog som din store-address.php eller så måste du uppdatera URL-sökvägen i store-address.php så att den kan hitta den.
