AJAX Mailchimp 가입 양식 통합


122

mailchimp simple (하나의 이메일 입력)을 AJAX와 통합하는 방법이 있습니까? 따라서 페이지 새로 고침이없고 기본 mailchimp 페이지로 리디렉션되지 않습니다.

이 솔루션은 MailChimp에서 작동하지 않는 jQuery Ajax POST가 작동 하지 않습니다.

감사


양식을 제출하면 mailchimp "확인"페이지로 리디렉션됩니다.
alexndm 2011

3
솔루션에 큰 보안 허점이 있습니다. API 키는 MailChimp 계정에 대한 전체 액세스 권한을 제공하므로 비공개로 취급해야합니다. #justsaying

1
그 해결책은 좋은 생각이 아니다 당신의 메일 침프 API 공개
Ruairi 브라운

3
mailchimp 웹 사이트의 기본 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'-요청이 성공했는지 여부를 나타냅니다 ( "error"및 "success"의 2 개 값만 보았습니다) 및 '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에 있는 경우 제거하십시오 . jQuery ajax 호출에 dataType: 'jsonp'및 사용하십시오 jsonp: 'c'.
czerasz 2013 년

5
mailchimp가 처리하려면 이메일 양식 필드에 name = "EMAIL"이 있어야합니다.
Ian Warner

5
누군가 문제가있는 경우 참고로 이메일 매개 변수의 이름은 EMAIL(모두 대문자) 여야합니다 . 그렇지 않으면 이메일 주소가 비어 있다는 오류가 표시됩니다.
Nick Tiberi 2015 년

5
이 답변이 작성된 이후 MailChimp가 API에 액세스하는이 방법을 비활성화 했습니까? API 키가없는 GET / POST가 사용자를 목록에 등록 할 수 있다는 표시가 문서에서 표시되지 않았습니다.
Greg Bell

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

당신은 해야 당신의 메일 침프 계정을 확보하기 위해 서버 측 코드를 사용합니다.

다음은 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) store-address.php적절한 위치 의 파일에 API 키와 목록 ID를 추가하여 Readme 파일의 지침을 따릅니다 .

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를 사용하면 모양과 옵션이 무한합니다.

  • Store-address.php 파일은 Mailchimp 사이트에서 PHP 예제의 일부로 다운로드되고 API KEYLIST ID로 수정됩니다 . 다른 선택적 필드를 배열에 추가해야합니다.

  • 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

2
쓰레기, 나는 말해야합니다-얼마 전에 사이트에서 @skube의 답변을 구현 한 다음 나중에 사이트 전체 https를 추가했습니다. mailchimp http AJAX 호출과 함께 작동하지 않는다는 것을 방금 발견했습니다. 사이트에서 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'원래 mailchimp 코드, 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가 활성화되면 mailchimp가 양식을 ajax 제출 양식으로 변환하므로 더 이상 개입 할 필요가 없습니다.

이제 필요한 것은 임베드 메뉴에서 생성 된 양식을 html 페이지에 붙여넣고 다른 코드를 수정하거나 추가하지 않는 것입니다.

이것은 단순히 작동합니다. 감사합니다 MailChimp!


4
정말 도움 당신은 같은 일을 몇 가지 기사 링크 / 블로그 게시물을 추가 할 수 있습니다 않을 경우
gonephishing

내 html 페이지에 Mailchimp 임베드 코드를 추가했지만 Ajax가 위에서 제안한대로 자동으로 작동하지 않습니다. 다른 페이지로 리디렉션됩니다. 리디렉션없이이 작업을 수행하려면 어떻게해야합니까?
Petra

1
MailChimp 관리자에서 목록-> 가입 양식-> 포함 된 양식-> 클래식으로 이동합니다. 코드 조각에 일부 JS가 포함되어 있음을 알 수 있습니다. 이렇게하면 양식 유효성 검사 및 AJAX 제출이 가능합니다.
MarcGuay 2011

1
mailchimp 코드 사용-사용자 지정 작업을 ajax 성공에 어떻게 연결합니까? [같은 양식을 숨기고]
Adeerlike

1
@Masiorama 이전 jquery가 포함되어 있고 너무 크고 취약하기 때문에 mc-validate 스크립트를 제거하기로 선택했습니다. 그래서 그냥 html 유효성 검사를 받고 stackoverflow.com/a/15120409/744690
Adeerlike

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>

자바 스크립트 :

$(function() {
  $('form').ajaxChimp({
    callback: function(response) {
      $('form .result').text(response.msg);
    }
  });
})

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.