有人调试Mixpanel track_forms的经验吗?
首先,Firebug Chrome控制台(当在Mixpoard配置中启用调试时)为任何track_forms事件显示一个空的属性对象。每个其他Mixpanel事件都有一个填充的属性对象,其中包含引用者、浏览器数据等。不清楚这是控制台时间问题,数据是否被实际记录,或者这些事件中是否确实缺少数据。
其次,我有一个jquery提交的表单(点击复选框后提交),这是我试图记录到mixtanel的一个事件。无论我使用track还是track_forms,事件都不会显示为日志。如果我添加了一个延迟表单提交的断点,则该事件将显示为日志。因此,这似乎是一个比赛条件和混合面板定时器不工作。
/* 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);
以前有人解决过这个问题吗?这是客户端表单提交的一个非常基本的用例。
这在mixtpanel文档中并不明显,但mixtpanel.track_forms()应该在页面加载时执行。我怀疑在后台,mixtpanel API检查DOM元素,寻找类型为"submit"的子元素,然后挂接"click"侦听器,以拦截表单提交,这样就可以在实际提交表单之前尝试mixtpanel-tracking
我也想让表单在表单字段更改时自动提交,而不是让用户单击单独的按钮。我们仍然需要"提交"输入按钮,但它可以被设置为隐藏。
以下对我有效:
$('#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>
还有一个问题:确保输入元素没有将id或名称设置为"submit",因为这会覆盖DOM选择器。
在提交表单之前立即调用track
将不起作用,因为页面更改会阻止跟踪完成。这就是track_forms
存在的原因;不幸的是,它不适用于以这种方式提交的表单。
最简单的方法是跟踪提交的页面上的数据。
最好的方法是跟踪正在处理表单数据的服务器上的数据。
顺便说一句,要跟踪的properties
参数(_forms)是可选的,所以您可以只执行mixpanel.track('my event');