AJAX Mailchimpサインアップフォームの統合


122

mailchimp simple(1つの電子メール入力)をAJAXと統合する方法はありますか?したがって、ページの更新やデフォルトのmailchimpページへのリダイレクトはありません。

このソリューションは動作しませんjQuery Ajax POSTはMailChimpで動作しません

ありがとう


フォームを送信すると、mailchimpの「確認」ページにリダイレクトされます。
alexndm 2011

3
あなたのソリューションは巨大なセキュリティホールを持っています、それはあなたのMailChimpアカウントへの完全なアクセスを提供するのでAPIキーはプライベートとして扱われるべきです。#justsaying

1
その解決策は、良い考えではないmailchimp APIを公開します
Ruairi Browne

3
mailchimpのWebサイトのデフォルトのHTML埋め込みオプションは、APIキーも公開していませんか?それはそのソリューションよりも良くも悪くもなり得ません。
Bob Bobbio

このjqueryプラグインを使用:github.com/scdoshi/jquery-ajaxchimp
sid

回答:


241

APIキーは必要ありません。行う必要があるのは、標準のmailchimpで生成されたフォームをコードに組み込み(必要に応じて外観をカスタマイズする)、フォームの "action"属性をフォームのアクションの最後に変更post?u=することです。クロスドメインの問題を回避するためにpost-json?u=追加&c=?します。また、フォームを送信するときは、POSTではなくGETを使用する必要があることに注意してください。

フォームタグはデフォルトで次のようになります。

<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は、2つの値を含むjsonオブジェクトを返します: 'result'-これは、リクエストが成功したかどうかを示します(私は2つの値、 "error"と "success"しか見たことがない)と '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-pluginを作成しました:github.com/scdoshi/jquery-ajaxchimp
sid

22
JSONPを使用することもできます。post-json説明どおりに使用します。&c=フォームのアクションURLにある場合は、それを削除します。dataType: 'jsonp'jsonp: 'c'をjQuery ajax呼び出しに使用します。
czerasz 2013

5
mailchimpを処理するには、Eメールフォームのフィールドにname = "EMAIL"が必要であることに注意してください
Ian Warner

5
誰かが問題を抱えている場合に備えて、参考までに、電子メールパラメータの名前はEMAIL(すべて大文字)にする必要があります。そうしないと、メールアドレスが空白であることを示すエラーが発生します。
Nick

5
この回答が書かれて以来、MailChimpはこのAPIアクセス方法を無効にしていますか?ドキュメントに、APIキーなしのGET / POSTでユーザーをリストに登録できるという表示はありませんでした。
グレッグベル

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の.submit()を使用してタイプを変更し、JSON応答を処理するためのURLを変更しました。

$('.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しかない場合は、MCAPIのバージョン1.2をダウンロードして、MCAPI.class.php上記の対応するファイルを置き換えます。

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

2)Readmeファイルの指示に従って、APIキーとリストIDを 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では、外観とオプションは無限です。

  • MailchimpサイトでPHPの例の一部としてダウンロードされ、API KEYおよびLIST IDで変更されたstore-address.phpファイル。他のオプションのフィールドを配列に追加する必要があります。

  • MailchimpサイトからダウンロードされたMCAPI.class.phpファイル(PHP 5の場合はバージョン1.3、PHP 4の場合はバージョン1.2)。あなたと同じディレクトリに置きストアaddress.phpか、内部URLパス更新する必要がありますストアaddress.phpを、それはそれを見つけることができるようにします。


2
サインアップフォームをサイトに追加してAJAX経由で送信するだけの場合は、@ gbinflamesの回答が機能します。自分で試してみただけです。
Patrick Canfield 2014

1
いいえ、必要はありませ
Nowaker 2014年

2
クラップ、私は言わなければならない-私はしばらく前にサイトに@skubeの回答を実装し、その後サイト全体のhttpsを追加しました。mailchimp http AJAX呼び出しでは機能しないことがわかりました。サイトでSSLの使用が必要になったり、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の答えに基づいて、これは私にとってうまくいったものです:

簡単なmailchimpリストサインアップフォームを生成し、アクションURLとメソッド(投稿)をカスタムフォームにコピーします。また、フォームフィールド名をすべて大文字に変更し(元のメールチンプコードのようにname = 'EMAIL'、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年2月)に関しては、mailchimpがgbinflamesが提案するものと類似したものを独自のjavascript生成フォームに統合したようです。

JavaScriptが有効になっている場合、mailchimpはフォームをajax送信フォームに変換するので、これ以上の操作は必要ありません。

あとは、埋め込みメニューから生成されたフォームをHTMLページに貼り付けるだけで、他のコードを変更したり追加したりする必要はありません。

これは単に機能します。MailChimpに感謝します。


4
同じことを行うために記事のリンクやブログ投稿を追加できると本当に便利です。
悪用する

Mailchimp埋め込みコードをHTMLページに追加しましたが、Ajaxは上記のように自動的に機能しません。別のページにリダイレクトされます。リダイレクトせずにこれを機能させるにはどうすればよいですか?
ペトラ

1
MailChimp管理者のリストに移動します->サインアップフォーム->埋め込みフォーム->クラシック。コードスニペットにJSが含まれていることがわかります。これにより、フォームの検証とAJAX送信が可能になります。
MarcGuay 2017年

1
mailchimpコードを使用して-カスタムアクションをajaxの成功にプラグインするにはどうすればよいですか?[フォームを非表示にするように]
Adeerlike 2018

1
@Masiorama mc-validateスクリプトを削除することを選択しました。古いjqueryも含まれており、大きすぎて脆弱だったためです。
つまり

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.