Отладка Mixpanel track_forms

У кого-нибудь есть опыт отладки Mixpanel track_forms?

Прежде всего, консоль Firebug Chrome (когда в конфигурации Mixpanel включена отладка) показывает пустой объект свойств для любого события track_forms. Каждое другое событие Mixpanel имеет заполненный объект свойств с реферером, данными браузера и т. д. Неясно, является ли это проблемой синхронизации консоли, и данные действительно регистрируются, или данные на самом деле отсутствуют в этих событиях.

Во-вторых, у меня есть форма, отправленная jquery (отправленная при нажатии флажка), которая представляет собой событие, которое я пытаюсь зарегистрировать в mixpanel. Независимо от того, использую ли я track или track_forms, событие не отображается в журнале. Если я добавлю точку останова, которая задерживает отправку формы, событие будет отображаться в журнале. Похоже, это состояние гонки, и таймер Mixpanel не работает.

/* doesn't work */
var d={};
$('.ch').bind('change',function(){  /*checkbox click submits form*/
    d['checked']=$(this).is(':checked'); 
    d['value']=$(this).val();
    mixpanel.track("my event",d);
    $('#myform').submit();
});

/* also doesn't work */
mixpanel.track_forms("#myform",'my event',d);

Кто-нибудь решил это раньше? Это очень простой вариант использования отправки формы на стороне клиента.


person randalv    schedule 16.02.2013    source источник


Ответы (2)


В документах mixpanel это не сразу очевидно, но mixpanel.track_forms() должен выполняться при загрузке страницы. Я подозреваю, что за кулисами API-интерфейс mixpanel проверяет элемент DOM в поисках дочернего элемента типа «отправить», затем перехватывает прослушиватель «щелчка», чтобы перехватить отправку формы, чтобы можно было попытаться отследить микспанель до фактической отправки формы. .

Я тоже хотел, чтобы форма автоматически отправлялась при изменении поля формы, а не чтобы пользователь нажимал отдельную кнопку. Нам по-прежнему нужна кнопка ввода «отправить», но ее можно сделать скрытой.

Для меня работает следующее:

    $('#lang_form_footer_form_select').bind('change',function(){
      $('#lang_form_footer_submit_btn').click();
    });
    mixpanel.track_forms("#lang_form_footer", "Language form - Footer");


    <form id="lang_form_footer" action="/i18n/setlang/" method="post">
    {% csrf_token %}
    {% get_current_language as LANGUAGE_CODE %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
      <select id="lang_form_footer_form_select" name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
          <option value="{{ language.code }}" {% if language.code == LANGUAGE_CODE %}selected="selected"{% endif %}>{{ language.name_local }}</option>
        {% endfor %}
      </select>
    <input id="lang_form_footer_submit_btn" type="submit" value="{% trans "Go" %}" style="display:none" />
    </form>

Также один нюанс: убедитесь, что у элемента ввода нет идентификатора или имени, установленного на «отправить», поскольку это переопределяет селектор DOM.

person Dwight Gunning    schedule 31.07.2013
comment
вы правы, что mixpanel.track_forms перехватывает отправку формы и задерживает ее на 300 мс, чтобы событие сработало, прежде чем продолжить отправку формы. - person Rob Sobers; 29.08.2013
comment
@dwightgunning Отличный улов. Это действительно работает, если я добавляю элемент type=submit в форму И запускаю событие щелчка этого элемента, а не вызываю событие form.submit() в моем javascript. Кроме того, в журнале консоли js mixpanel есть ошибка, из-за которой не регистрируются свойства, отправленные в событие track_forms в консоли, что очень вводит в заблуждение. Однако я убедился, что свойства успешно попадают на сервер MixPanel через их функцию просмотра в реальном времени. Не очень просто использовать и отлаживать все эти подводные камни, но тайна решена. - person randalv; 05.09.2013

Вызов track непосредственно перед отправкой формы не сработает, так как изменение страницы препятствует завершению отслеживания. Вот почему track_forms существует; к сожалению, это не работает для форм, отправленных таким образом.

Самый простой способ сделать это — отследить данные на странице, на которую попадает отправка.

Лучший способ сделать это — отслеживать данные на сервере, на котором обрабатываются данные формы.

Кстати, параметр properties для отслеживания(_forms) необязателен, так что вы можете просто сделать mixpanel.track('my event');

person raylu    schedule 19.02.2013
comment
Привет @raylu. Я хочу использовать клиентскую библиотеку, не завися от установки данных в последующем запросе. Похоже, нет никакого способа сделать это. Очень жаль. - person randalv; 31.07.2013
comment
@randalv, когда вы отправляете форму, вы уже отправляете данные на следующий запрос. Поэтому лучший способ — отслеживать данные на сервере. - person raylu; 31.07.2013
comment
неправильно, предполагалось, что track_forms это сделает. Но библиотека кажется глючной - person Juan; 09.08.2013
comment
В заключение, лучший способ — отслеживать данные на сервере. - person raylu; 09.08.2013
comment
Я нашел способ сделать это. я использую jquery: свяжите отправку формы с помощью $('form').submit(), затем отправьте свое событие в mixpanel и создайте интервал, используя setInterval. затем вернуть ложь. Внутри setInterval отправьте форму напрямую, используя $('form').get(0).submit, и обработчик не будет выполняться.. используя 500 мс, поскольку интервал достаточно длинный.. - person Juan; 14.08.2013
comment
@raylu, согласился, что код на стороне сервера будет работать нормально, просто он не будет виден для тестирования с остальными сообщениями консоли js. В то время, когда я разместил вопрос, у меня была только реализация на стороне клиента, но я вижу, что в настоящее время они также поддерживают простой модуль на стороне сервера с функцией отслеживания, которую можно использовать вместо функции track_forms на стороне клиента. Хуан, setInterval звучит так, как будто он отлично сработает, чтобы воспроизвести задержку track_forms в 300 мс, которая теперь задокументирована в документах MixPanel. Как заметил dwightgunning, для track_form требуется элемент type=submit. - person randalv; 04.09.2013