Отправка структуры JSON в MailChimp API через HTML-форму + JavaScript

Благодарю вас за помощь в том, что, я уверен, является настоящей головной болью. Я настраиваю простой веб-интерфейс, чтобы проверить, является ли адрес электронной почты уже подписанным на существующий список MailChimp. На данный момент я хотел бы просто использовать базовый HTML и JavaScript.

Мой ключ API MailChimp проверяется, и я могу выполнять запросы, для которых требуются только строковые данные, но для соответствующего вызова API требуется структура для адресов электронной почты, и я продолжаю получать сообщение об ошибке в любом варианте кода ниже. Я зашел так далеко, что установил node.js и просто запустил его из командной строки, и запрос действительно работает с теми же данными, поэтому я уверен, что я просто это близко, но нужно ваша помощь, чтобы преодолеть горб.

Вот соответствующий фрагмент сценария и формы. Как написано, я получаю в ответ следующее сообщение об ошибке: Ошибка проверки: {\"email\":\"Пожалуйста, введите структуру\/ассоциативный массив\"}"}

<script type="text/javascript">
function collectAndSubmit() {
        var emailAddy = document.getElementById("emailAddy").value;
        var JSONemail = {"email":
                            {
                                "email": emailAddy
                            }
                        };
        document.getElementById("email").value = JSONemail;
        document.getElementById("apikey").value ="M*Y*A*P*I*K*E*Y"
        document.testform.submit();
}
</script>
</head>
<body>
<form action="https://us2.api.mailchimp.com/2.0/helper/lists-for-email" method="post" name="testform">
    Email Address: <input type="text" id="emailAddy" name="emailAddy" />
    <input type="hidden" id="apikey" name="apikey" />
    <input type="hidden" id="email" name="email" />
    <br>
    <input type="button" value="Check Email" onclick="collectAndSubmit()" />
</form>
</body>
</html>

Заранее спасибо за вашу помощь.


person Bret    schedule 06.06.2014    source источник
comment
Исправленный/работающий фрагмент кода значительно уменьшен, так как данные электронной почты теперь можно просто передавать прямо из формы, а не собирать в javascript. Вот исправленная запись формы ввода: Email: ‹input type=text id=email name=email[email] /›   -  person Bret    schedule 06.06.2014


Ответы (1)


Ваша форма неверна. Вы можете ознакомиться с их документацией. Вы должны настроить то, что они называют email struct, который на самом деле является массивом. Ваш атрибут ввода электронной почты должен выглядеть как <input type="text" id="email" name="email[email]">.

Обратите внимание на email[email], данные будут выглядеть как "email": {"email": "input value"}

Кроме того, если ваш API-ключ должен быть секретным, то скрывать его в html-форме — не лучшая идея.

person Kirill Fuchs    schedule 06.06.2014
comment
Большое спасибо - это была проблема; Я читал их документы, я просто не мог понять, как передать структуру. Я обновлю фрагмент кода в исходном сообщении исправленной версией. Если вы можете уделить еще несколько минут для продолжения, вы упомянули, что размещение ключа API, который действительно должен быть закрытым, в качестве скрытого поля - не очень хорошая идея, и я определенно согласен. Какова наилучшая альтернатива в этой базовой настройке, или мне действительно нужно каким-то образом справиться с этим на стороне сервера? - person Bret; 06.06.2014
comment
@Bret да, если ключ API должен быть секретным, он должен находиться на стороне сервера. Таким образом, ваш серверный язык создаст вызов API, и ваша форма просто отправится на ваш сервер. - person Kirill Fuchs; 06.06.2014