我尝试在我的注册表单上设置Mixpanel人员跟踪,但我无法将Mixpanel的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 :(得分:0)
根据您分享的内容,您现在看起来很喜欢变量&#34; distinct_id&#34;当它实际上只在init函数的范围内时作为全局变量。正如trincot所提到的,移动$(document).ready()
块中的内容可能会解决问题,尽管将distinct_id声明为全局变量也应该有效。
答案 1 :(得分: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);
}
});