2016-12-28 77 views
0

我试图设置Mixpanel人员跟踪我的注册表单,但我无法将Mixpanel的distinct_id传递给我的表单。Mixpanel Javascript - distinct_id变量返回对象

这是获取用户的自Mixpanel(documentation)distinct_id脚本:

mixpanel.init("MY_TOKEN", { 
    loaded: function(mixpanel) { 
     distinct_id = mixpanel.get_distinct_id(); 
    } 
}); 

当我试图把它与

$(document).ready(function(){ 
    $("#distinct_id").val(distinct_id); 
}); 

<input type="hidden" name="distinct_id" id="distinct_id" value="" />传递给隐藏输入我的登记表,Chrome Inspector源代码中的结果行看起来像这样:<input type="hidden" name="distinct_id" id="distinct_id" value="[object HTMLInputElement]">

然而,当我在Chrome控制台中执行console.log(distinct_id);时,它会输出ID。

我得承认,我的JavaScript是相当垃圾,所以我可能会错过一些东西很明显这里...我已经试过与JSON.stringify功能,像这样分析它:

$(document).ready(function(){ 
    distinct_id = JSON.stringify(distinct_id, null, 4); 
    $("#distinct_id").val(distinct_id); 
}); 

,但它只是生产{}作为一个值的形式...

有什么建议吗?

+0

第一个代码块中缺少一个报价。 – trincot

+0

很好看,谢谢。必须删除,当我删除我的Mixpanel令牌这个问题 – tristanojbacon

+1

这可能是'ready'回调触发'pixpanel.init ... loaded'回调之前,如果最好移动这个小$(文档)。就绪'块*内部*'init ....加载'回调。 – trincot

回答

0

根据你已经共享的内容,它现在看起来很喜欢你正在将变量“distinct_id”当作全局变量处理,实际上它只是在init函数的范围内。正如trincot提到的那样,移动$(document).ready()块中的内容可能会解决问题,但将distinct_id声明为全局变量也应该有效。

0

因此,根据@trincot的建议,我将$("#distinct_id").val(distinct_id);添加到init ... loaded函数,并且它工作。

作为参考,这里是产生的代码是什么样子:

mixpanel.init("MY_TOKEN", { 
    loaded: function(mixpanel) { 
     distinct_id = mixpanel.get_distinct_id(); 
     $(document).ready(function(){ 
      $("#distinct_id").val(distinct_id); 
     }); 
    } 
}); 

此外,您可以跳过$(document).ready(function() {});完全,只是这样做,因为你只需要mixpanel加载:

mixpanel.init("MY_TOKEN", { 
    loaded: function(mixpanel) { 
     distinct_id = mixpanel.get_distinct_id(); 
     $("#distinct_id").val(distinct_id); 
    } 
});