Конфликт jQuery в MailChimp

У меня было УЖАСНОЕ время, когда я интегрировал MailChimp в сайт, который я разрабатываю!

Проблема в том, что проверка встроенной формы подписки не работает. Вместо встраивания сообщений об ошибках форма перенаправляет пользователя на страницу регистрации MailChimp для исправления ошибок или подтверждения подписки на список.

Я внес много изменений в код, поэтому, к сожалению, вернуться к настройкам по умолчанию не получится.

Вот ошибки, которые я получаю, но я JS n00b, поэтому я не знаю, что они означают:

Перерыв при ошибке mce_jQuery не определен:

Снимок экрана 22 августа 2010 г., 4:34:50.jpg

Я не думаю, что это ошибка, которую можно поймать с помощью консоли.

Странно вот что. Если я вырву пользовательский код и просто опубликую статический код из MailChimp, это как-то сработает, но я скопировал весь соответствующий код с важными функциями и все еще без кубиков.

Вы можете просматривать сайт в режиме реального времени по адресу: http://ranya.net/wp/contact.

Регистрация в списке MailChimp находится в раскрывающемся списке в правом верхнем углу. Соответствующие скрипты встраиваются сразу после div#top_mailing.


person Brian    schedule 22.08.2010    source источник


Ответы (5)


Или вы можете просто переименовать эту переменную в файле mailChimp.js:

var mce_jQuery = jQuery.noConflict();

to

var mce_jQuery = jQuery;

Не знаю, почему разработчики MailChimp решили переписать знак доллара методом.

person Kenneth Hein Møller    schedule 08.02.2012

Использование jquery 1.8.1 и последнего кода mailchimp от 28 мая 2013 г.

Я не смог найти комментарий выше, чтобы раскомментировать его.

Однако я мог видеть этот код mailchimp:

function mce_init_form(){
jQuery(document).ready( function($) {

Мое понимание этого невелико, но это переназначает переменную jquery $ по умолчанию.

Однако позже в коде было это:

function mce_success_cb(resp){
$('#mce-success-response').hide()

который отключал код mailchimp

я изменил его на

function mce_success_cb(resp){
jQuery(document).ready( function($) {
$('#mce-success-response').hide();

и это работает. Не совсем уверен, почему (и хотел бы получить объяснение!), Но решил опубликовать, поскольку кто-то может столкнуться с этим вопросом так же, как и я.

person user1010892    schedule 28.05.2013
comment
Большой! Рад, что это помогло - person user1010892; 30.07.2013
comment
Вы добавили закрывающую скобку к новой строке jQuery(document).ready( function($) {? Если да, то где? - person novicePrgrmr; 11.09.2013
comment
жаль, что это было некоторое время! Я думаю, что закрывающая скобка должна стоять после всего кода, связанного с #mce-success-response. Дайте мне знать, если это не поможет, и я посмотрю (мне нужно выяснить, в каком проекте это было!!) - person user1010892; 12.09.2013

Мне не повезло ни с одним из вышеперечисленных решений, вероятно, потому, что последнему ответу больше года, и он больше не отражает текущий код mailchimp.

Чтобы решить мои конфликты jQuery, я скопировал скрипт mc-validate.js, который обслуживает MailChimp, из http://s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js и поместите его на наш собственный сервер. Затем я украсил его и удалил код jquery из файла. Таким образом, теперь на нашем сервере осталась только наша версия jquery, и больше ничего не конфликтует.

Судя по всему, вам также больше не понадобится строка var $mcj = jQuery.noConflict(true);.

@mailchimp: отличным решением этой проблемы было бы, если бы вы могли просто предоставить другую версию кода на своих серверах Amazon, которая не включает jquery.

person rassoh    schedule 08.12.2014

Попробуйте переместить этот код вправо вверху (например, сразу после тега <head>):

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script>jQuery.noConflict();</script>
<script type="text/javascript" src="http://downloads.mailchimp.com/js/jquery.validate.js"></script>
<script type="text/javascript" src="http://downloads.mailchimp.com/js/jquery.form.js"></script>
person Alec Smart    schedule 22.08.2010
comment
Хорошая попытка, но нет, после перемещения встроенная проверка все равно не выполняется :( - person Brian; 22.08.2010
comment
Вы загружаете 2 версии jQuery в свой код. Вы уверены, что хотите это сделать? - person Alec Smart; 22.08.2010
comment
Ты был почти прав, Алек! Смотрите мой ответ ниже для разрешения :) - person Brian; 22.08.2010

Ответ Алека Смарта был ПОЧТИ правильным. Запустив jQuery в режиме NoConflict, проблема была решена. Алек предложил мне добавить jQuery.noConflict(); в шапке документа. Оказывается, в коде встраивания MailChimp есть закомментированная строка. Чтобы правильно включить режим noConflict для скрипта MailChimp, найдите

 //var mce_jQuery = jQuery.noConflict();

Удалите комментарий, чтобы он выглядел так

 var mce_jQuery = jQuery.noConflict();

и тогда вам должно быть хорошо идти! :)

person Brian    schedule 22.08.2010