2013-03-14 3 views
6

Ich habe den folgenden Codeblock, der einen Klick auf eine Schaltfläche verfolgt und dann Analytics im Mixpanel aufzeichnet.Warum funktioniert ein Stück Javascript nur, wenn ich darunter eine Warnung habe?

<script type="text/javascript"> 
$('.buy').click(function() { 
    var myPart = $('#part-name').text(); 
    var myDistributor = $(this).closest('tr').children('.distributor').text(); 
    mixpanel.track("Buy Part Link", {"PartName": myPart, "Distributor": myDistributor}); 
}); 
</script> 

Auf seinem eigenen wird die Aktivität nicht in dem in MixPanel verfolgt. Wenn ich jedoch alert ('added'); unter dem Mixpanel-Tracking-Code hinzufüge, funktioniert es plötzlich perfekt.

Warum?

Update: Da einige Leute gefragt haben, wurde die Warnung unter dem mixpanel.track Befehl platziert.

+1

Wo haben Sie die Warnung hinzugefügt? –

+11

vielleicht, weil Sie ein 'a' Tag verwenden und die Seite wird aktualisiert, bevor das Skript es tun kann – musefan

+0

@musefan Oh, das ist ein guter. Hab nicht mal daran gedacht. –

Antwort

12

Ich nehme eine Schätzung und sage vielleicht, weil Sie ein a Tag verwenden und die Seite wird aktualisiert, bevor das Skript es tun kann.

Die Lösung für das wäre event.preventDefault wie so in Ihrer Funktion zu verwenden:

$('.buy').click(function(event) { 
    event.preventDefault(); 
    //the rest of your code 
}); 

standardmäßig ein a Tag wird in der Regel zu einer neuen Seite navigieren (basierend auf das href Attribute). Wenn kein href festgelegt ist, wird normalerweise die aktuelle Seite neu geladen. Dies ist eine häufige Überlegung von den meisten Menschen, die die preventDefault Funktion nicht kennen. Durch das Hinzufügen dieser Zeile wird jedoch verhindert, dass die Verknüpfung irgendwo navigiert.

Wie @Esailija gesagt hat, wenn der gesamte Code innerhalb Ihrer Klick-Funktion synchron läuft, würde er vor der Seitennavigation vollständig sein, was darauf hindeutet, dass ein Teil davon (am ähnlichsten wie der .track Aufruf) asynchron läuft - vielleicht mit B. ein Timer oder über einen Ajax-Ruf.

Im Allgemeinen, wenn Sie feststellen, dass eine Warnung Code beheben wird, ist es wahrscheinlich, weil etwas nicht genügend Zeit für die Fertigstellung bekommt. Suchen Sie also immer nach etwas, das das Skript beenden würde, dies ist höchstwahrscheinlich (und in diesem Fall) eine Seite neu laden/aktualisieren.

Wenn dies nicht das Problem ist, dann müssen wir vielleicht etwas von Ihrem HTML sehen, um weiter zu helfen.


Durch Ihre Kommentare, dass Sie noch navigieren möchten, habe ich eine sehr schnelle Google-Suche und die Dokumentation erfahren Sie, wie Links zu handhaben. Look at this page und scrollen Sie nach unten zur Funktion mixpanel.track_links.

+6

Es geht nicht um einen Job, sondern darum, dass der Job asynchron ist. Wenn es synchron wäre, würde es vor der Navigation abgeschlossen sein. – Esailija

+0

@Esailija: Natürlich hätte ich diesen Teil klarer machen müssen – musefan

+0

+1 für die "Warnung wird Code beheben", genau, was ich nach dem Lesen der Frage Titel dachte D – Esailija

Verwandte Themen