Mixpanel Javascript - distinct_id变量返回一个对象

时间:2016-12-28 20:50:02

标签: javascript jquery forms mixpanel

我尝试在我的注册表单上设置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);
});

但它只是将{}作为格式生成...

有什么建议吗?

2 个答案:

答案 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);
    }
});