2011-12-28 3 views
6

Я пытаюсь зарегистрировать событие в MixPanel, когда пользователи нажимают на определенный тип ссылки. Я использую JQuery, чтобы сделать это ненавязчиво, и насколько я понимаю, мне нужно добавить функцию обратного вызова, чтобы вывести пользователя на URL после того, как событие было зарегистрировано.Как зарегистрировать событие MixPanel, когда пользователь нажимает на ссылку?

Это код, я использую:

<script type="text/javascript"> 
    $("#more-posts").click(function() { 
     event.preventDefault(); 
      mpq.track("More Posts", function(){ 
       window.location = $(this).attr("href"); 
      }); 
    }); 
</script> 

К сожалению, это ни берет пользователя на страницу и не регистрирует событие, но я не вижу никаких ошибок в консоли Javascript в Chrome.

Какие-нибудь идеи в чем проблема?

Update: Также попробовал этот код на основе предложений в комментариях:

<script type="text/javascript"> 
    function go_to_link(link) { 
     window.location = link; 
    } 
    $("#more-posts").on("click", function(event) { 
      event.preventDefault(); 
      mpq.track("More Posts"); 
      setTimeout("go_to_link($("#more-posts").attr("href"))", 2000); 
    }); 

</script> 

Теперь перенаправляет к правильной линии, но до сих пор не регистрирует событие.

+1

Откуда возникает «событие»? Это должен быть аргумент обращения к клику. – Robin

+0

Я так не думаю. Это предотвращает поведение по умолчанию события click, чтобы следующий код имел возможность выполнить. Если я сделаю предложенное изменение, щелчок просто приведет пользователя к URL-адресу без регистрации события. Он также дает «неподтвержденную опорную ошибку». – cutwithflourish

+0

Каковы ошибки в хроме? –

ответ

2

Я считаю, что это кандидат на поддержку MixPanel: [email protected] Ошибка не связана с вашим кодом jQuery. Вот working jsFiddle, который демонстрирует основные функции.

Как я уже упоминал, я видел подобные проблемы с _kmq.push с Kissmetrics. Их JS просто не успевает зарегистрировать событие. Если вы попробуете более длительный тайм-аут, это может сработать, но это плохо UX.

Обновить здесь, если вы достигнете MixPanel.

+0

Спасибо, Джош, я отправил электронное письмо в поддержку MixPanel - надеюсь, они могут пролить свет на это. – cutwithflourish

1

Вместо использования setTimeout рассмотрите возможность использования параметра обратного вызова mpq.track.

Альтернативно, отслеживайте загрузку страницы в том месте, куда пошла ссылка.

3

Третий аргумент функции mpq.track - это обратный вызов. Этот код запускается после завершения отслеживания и будет надежным способом отправить пользователя на другую страницу.

$("#more-posts").on("click", function(event) { 
     event.preventDefault(); 
     mpq.track("More Posts", null, function() { 
      go_to_link($("#more-posts").attr("href")) 
     }); 
}); 
+1

Тогда есть вероятность, что обратный вызов никогда не будет вызван, и ваш сайт будет сломан. –

+0

Правильно, обратный вызов может не выполняться. Путь к этому будет заключаться в использовании некоторого обещания и отложенного кода, если обратный вызов никогда не запускается (может произойти <1% времени), вы можете отказаться от запуска метода времени. –

0

Проще всего использовать обратный вызов функции в mixpanel.track, который запускается после успешного завершения регистрации события.

Код будет выглядеть следующим образом.

mixpanel.track("Great Success!", {}, function(){ 
    window.location.href = "www.whatever.com"; 
}); 
Смежные вопросы