Integrazione del modulo di iscrizione AJAX Mailchimp


122

Esiste un modo per integrare mailchimp simple (un ingresso e-mail) con AJAX, quindi non c'è aggiornamento della pagina e nessun reindirizzamento alla pagina mailchimp predefinita.

Questa soluzione non funziona jQuery Ajax POST non funziona con MailChimp

Grazie


dopo aver inviato il modulo reindirizza alla pagina di "conferma" di mailchimp.
alexndm

3
la tua soluzione ha un enorme buco di sicurezza, la chiave API dovrebbe essere trattata come privata poiché fornisce pieno accesso al tuo account MailChimp. #justsaying

1
Quella soluzione espone la tua API mailchimp che non è una buona idea
Ruairi Browne

3
L'opzione di incorporamento HTML predefinita sul sito Web di mailchimp non espone anche la tua chiave API? Non può essere migliore o peggiore di quella soluzione.
Bob Bobbio

Utilizzare questo plugin jQuery: github.com/scdoshi/jquery-ajaxchimp
sid

Risposte:


241

Non hai bisogno di una chiave API, tutto ciò che devi fare è inserire il modulo standard generato da mailchimp nel tuo codice (personalizza l'aspetto secondo necessità) e nei moduli l'attributo "azione" cambia post?u=in post-json?u=e poi alla fine dell'azione dei moduli aggiungi &c=?per aggirare qualsiasi problema interdominio. Inoltre è importante notare che quando si invia il modulo è necessario utilizzare GET anziché POST.

Il tag del modulo sarà simile a questo per impostazione predefinita:

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

cambiarlo per assomigliare a questo

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

Mail Chimp restituirà un oggetto json contenente 2 valori: 'result' - questo indicherà se la richiesta ha avuto successo o meno (ho sempre visto solo 2 valori, "error" e "success") e 'msg' - un messaggio descrivere il risultato.

Invio i miei moduli con questo bit di 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
Ho creato un plug-in jquery che utilizza questo metodo: github.com/scdoshi/jquery-ajaxchimp
sid

22
Puoi anche usare JSONP. Usa il post-jsoncome descritto. Rimuovi il &c=se lo hai nell'URL dell'azione del modulo. Usa dataType: 'jsonp'e jsonp: 'c'per la tua chiamata jQuery ajax.
czerasz

5
Tieni presente che i campi del modulo email devono avere name = "EMAIL" affinché mailchimp possa essere elaborato
Ian Warner

5
Solo per tua informazione, nel caso qualcuno abbia problemi, il nome del parametro email dovrebbe essere EMAIL(tutto maiuscolo). Altrimenti riceverai un errore che indica che l'indirizzo e-mail è vuoto.
Nick Tiberi

5
MailChimp ha disabilitato questo metodo di accesso all'API da quando è stata scritta questa risposta? Non ho visto alcuna indicazione nella documentazione che un GET / POST senza la chiave API possa iscrivere un utente a un elenco.
Greg Bell

34

Sulla base della risposta di gbinflames, ho mantenuto il POST e l'URL, in modo che il modulo continuasse a funzionare per quelli con JS disattivato.

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

Quindi, utilizzando .submit () di jQuery, è stato modificato il tipo e l'URL per gestire le risposte 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

Si consiglia di utilizzare il codice lato server, al fine di proteggere l'account MailChimp.

Quella che segue è una versione aggiornata di questa risposta che utilizza PHP :

I file PHP sono "protetti" sul server dove l'utente non li vede mai, ma jQuery può ancora accedervi e utilizzarli.

1) Scarica l'esempio di jQuery PHP 5 qui ...

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

Se hai solo PHP 4, scarica semplicemente la versione 1.2 di MCAPI e sostituisci il MCAPI.class.phpfile corrispondente sopra.

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

2) Seguire le indicazioni nel file Leggimi aggiungendo la chiave API e l'ID elenco al store-address.phpfile nelle posizioni corrette.

3) Potresti anche voler raccogliere il nome dei tuoi utenti e / o altre informazioni. È necessario aggiungere un array al store-address.phpfile utilizzando le variabili di unione corrispondenti.

Ecco store-address.phpcome appare il mio file dove raccolgo anche il nome, il cognome e il tipo di 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) Crea il tuo modulo HTML / CSS / jQuery. Non è necessario essere su una pagina PHP.

Ecco qualcosa di simile a index.htmlcome appare il mio file:

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

Pezzi necessari ...

  • index.html costruito come sopra o simile. Con jQuery, l'aspetto e le opzioni sono infinite.

  • file store-address.php scaricato come parte degli esempi PHP sul sito Mailchimp e modificato con la tua API KEY e LIST ID . È necessario aggiungere gli altri campi facoltativi all'array.

  • File MCAPI.class.php scaricato dal sito Mailchimp (versione 1.3 per PHP 5 o versione 1.2 per PHP 4). Inseriscilo nella stessa directory del tuo store-address.php o devi aggiornare il percorso dell'URL all'interno di store-address.php in modo che possa trovarlo.


2
Se vuoi solo aggiungere un modulo di iscrizione al tuo sito e inviarlo tramite AJAX, la risposta di @ gbinflames funziona. Ho appena provato io stesso.
Patrick Canfield

1
No, non è necessario .
Nowaker,

2
Merda, devo dire: ho implementato la risposta di @ skube qualche tempo fa su un sito e poi ho aggiunto https a livello di sito. Ho appena scoperto che non funziona con la chiamata http AJAX di mailchimp. Consiglio vivamente di utilizzare questo metodo subito se il tuo sito potrebbe aver bisogno o prendere in considerazione l'utilizzo di SSL.
squarecandy

12

Per chi cerca una soluzione su uno stack moderno:

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

Sulla base della risposta di gbinflames, questo è ciò che ha funzionato per me:

Genera un semplice modulo di iscrizione alla lista mailchimp, copia l'URL dell'azione e il metodo (post) nel modulo personalizzato. Rinomina anche i nomi dei campi del modulo in maiuscolo (nome = 'EMAIL' come nel codice mailchimp originale, EMAIL, FNAME, LNAME, ...), quindi usa questo:

      $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

Per quanto riguarda questa data (febbraio 2017), sembra che mailchimp abbia integrato qualcosa di simile a ciò che gbinflames suggerisce nel proprio modulo generato da javascript.

Non è necessario alcun ulteriore intervento ora poiché mailchimp convertirà il modulo in uno inviato ajax quando javascript è abilitato.

Tutto quello che devi fare ora è incollare il modulo generato dal menu di incorporamento nella tua pagina html e NON modificare o aggiungere alcun altro codice.

Funziona semplicemente. Grazie MailChimp!


4
Sarà davvero d'aiuto se puoi aggiungere alcuni link ad articoli / post di blog per fare lo stesso
gophishing

Ho aggiunto il codice di incorporamento di Mailchimp nella mia pagina html ma Ajax non funziona automaticamente come suggerito sopra. Vengo reindirizzato a un'altra pagina. Come posso farlo funzionare senza un reindirizzamento?
Petra

1
Nell'amministratore di MailChimp vai alla tua lista -> Moduli di iscrizione -> Moduli incorporati -> Classico. Vedrai che c'è del JS incluso nello snippet di codice. Ciò consentirà la convalida del modulo e l'invio AJAX.
MarcGuay

1
utilizzando il codice mailchimp - come collego un'azione personalizzata al successo di ajax? [come nascondere il modulo]
Adeerlike il

1
@Masiorama Ho deciso di rimuovere lo script mc-validate, poiché conteneva anche un vecchio jquery ed era troppo grande e vulnerabile. quindi basta avere la convalida html e la presentazione con AJAX come in stackoverflow.com/a/15120409/744690
Adeerlike

4

Usa il plugin jquery.ajaxchimp per raggiungere questo obiettivo. È semplicissimo!

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.