2014-05-27 2 views
5

Мы хотим использовать MixPanel для захвата событий на нашем сайте, и я пытаюсь получить идентификатор пользователей, поэтому я использую следующий код сниппет:В ожидании mixpanel JS lib, чтобы быть готовым, чтобы я мог получить users_im_id

$(document).ready(function($){ 
    console.log("We have distinct id"); 
    console.log(mixpanel.get_distinct_id()); 
}); 

Это вызывает ошибку говоря «не определено не является функцией» при попытке получить отчетливое идентификатор.

Я проверил в отладчике и могу подтвердить, что объект mixpanel не имеет метода get_distinct_id. Однако, если я жду, пока страница загрузится, а затем проверит mixpanel.get_distinct_id() в консоли, я получаю отчетливый id без проблем.

Я могу только догадываться, что объект mixpanel еще не завершил инициализацию. Есть ли обратный вызов или событие, которое я могу использовать, чтобы знать, как только объект mixpanel сможет рассказать мне пользователей distinct_id?

ответ

10

Из статьи Mixpanel:

«[...] передать объект конфигурации методу mixpanel.init() с заряженным параметром и функции обратного вызова, которая будет выполнять сразу же после того, как наша библиотека закончил Внутри функции обратного вызова вы можете использовать методы get_property() и get_distinct_id() и убедиться, что они будут выполняться только после завершения загрузки библиотеки ».

mixpanel.init('Project Token', {'loaded':function() { 
    var distinct_id = mixpanel.get_distinct_id()} 
}); 

Источник: How to prevent get_distinct_id & get_property from returning undefined

+0

Просто проверяю мое понимание - значит ли это, что вы r выпустить mixpanel.init из фрагмента и загрузить его из другого места в вашем коде? Запуск init на mixpanel более одного раза не похож на отличную идею. –

+0

@ ChrisO'Sullivan нет, это единственный вызов 'mixpanel.init', который вы должны иметь. Просто добавьте обратный вызов к существующему 'init'. – burtyish

-1

Вы делаете получить district_id из печенья:

cookie = document.cookie.split(";")[0]; 
distinct_id = cookie.substr(74,53); 

но правильно использовать регулярное выражение Удачи!

1

Я нашел фрагмент кода здесь: https://gist.github.com/calvinfo/5117821, кредит https://gist.github.com/calvinfo, который выглядит следующим образом:

$(document).ready(function() { 
    if ($("#mixpanel_distinct_id").length > 0) { 
    var interval = setInterval(function() { 
     if (window.mixpanel.get_distinct_id) { 
     $("#mixpanel_distinct_id").val(window.mixpanel.get_distinct_id()); 
     clearInterval(interval); 
     } 
    }, 300); 
    } 
}); 

В основном это позволяет проверять каждые 300 миллисекунд ли завершен объект mixpanel инициализации и get_distinct_id функция доступна ,

+0

analytics.ready только для segment.io – dwenaus

+0

Изменить первую строку в '$ (документ) .ready (функция() {' – dwenaus

+0

Ах да .. хороший улов Спасибо – ianpetzer