2012-04-04 2 views
0

J'ai besoin de suivre les clics sortants à partir d'un répertoire sur notre site, et je voudrais faire cela pour que l'URL réelle soit dans le href. Quelque chose comme:Jquery clicktracking mousedown vs cliquez sur

<a href="http://www.example.com" id="a24" class="link" >Go to Example</a> 

Ceci est le JQuery que j'utilise ci-dessous. Le fichier click.php recherche essentiellement l'identifiant du lien, puis insère les informations de clic dans une table mysql.

Cela semble fonctionner correctement même si le fichier click.php prend beaucoup de temps à se terminer. En d'autres termes, l'utilisateur se connecte immédiatement à l'url de destination, même si je mets le click.php en veille pendant 10 secondes avant de terminer.

J'utilise $ ('a.link'). Mousedown au lieu de $ ('a.link'). Cliquez Lorsque j'utilise .cliquez, il ne fonctionne pas (le clic est pas enregistré). Je suis juste curieux de savoir pourquoi cela ne fonctionne pas avec l'utilisation de la fonction .click et fonctionne uniquement avec la fonction .mousedown.

Est-ce un bon moyen de capturer les clics avec JQuery ou existe-t-il un meilleur moyen? (Je me rends compte que n'importe qui avec Javascript désactivé ne serait pas compté).

$('a.link').mousedown(function(e){ 

     var my_id = $(this).attr('id'); 

     $.ajax({  
      type: "GET", 
      url: "/tiger/sal/clicks/click.php?id=my_id" 
     }); 

     return true; 

}); 

Répondre

2

Vous ne donnez pas assez de temps à jQuery pour tout calculer avant que votre navigateur ne le fasse. Pourquoi ne pas essayer quelque chose comme:

$('a.link').click(function(e){ 

    // Prevent the browser from running away 
    e.preventDefault(); 

    // I've changed this to POST to make it a bit more secure 
    // You can access the link ID with $_POST['link_id'] now 
    $.post('/tiger/sal/clicks/click.php', { link_id: $(this).attr('id') }); 

    // Wave goodbye 
    window.location.href = $(this).attr('href'); 

}); 
+0

Merci, mais même avec le mousedown et le click.php prenant 10 secondes pour terminer (j'inclus sleep (10) dans le fichier click.php) cela fonctionnera. Donc, il envoie immédiatement l'utilisateur sur le site, puis environ 10 secondes plus tard, l'enregistrement de clic est entré dans le tableau. C'est ce que je veux qu'il fasse, je suppose que je me demande juste pourquoi ça fonctionne avec mousedown et ne cliquez pas, et si je fais quelque chose qui pourrait causer des problèmes dans le clicktracking. – Frank

+0

Okay. J'ai édité ma réponse. Vous voulez envoyer une requête '$ .post()' en utilisant jQuery - cela envoie la requête au serveur et n'attend pas qu'elle soit terminée avant d'expédier l'utilisateur à la destination du lien. Cela envoie toutes les informations nécessaires à votre script pour être traitées _without_ nécessitant que l'utilisateur attende que cela se termine. Aussi, j'essaierais d'éviter d'utiliser 'sleep()' autant que possible parce que ce n'est pas très bon pour l'interface utilisateur. – hohner

+0

Merci beaucoup, je dois partir maintenant, mais je vais le tester dès que possible. Aussi, je viens de mettre le sommeil là pour voir ce qui se passerait si le serveur était vraiment lent, et si cela ralentirait les gens à l'URL de destination. Donc, je supprimerais cela en production. – Frank

0

Je ne vois pas pourquoi cela ne fonctionnerait pas.

Cela fonctionne quand je l'ai testé, mais le point final url doit être corrigé dans votre appel AJAX:

$(function(){ 
    $('a.link').click(function(e){ 
    var my_id = $(this).attr('id'); 
    var href = $(this).attr('href'); 
    $.ajax({  
     type: "GET", 
     url: "/tiger/sal/clicks/click.php?id=" + my_id, 
     success: function(d){ 
      // allow it to successfully call the server before redirecting. 
      window.location = href; 
     } 
    }); 
    return false; 
    }); 
}); 

je ne voudrais pas le faire dans un « mousedown » puisque cela ne garantit pas que l'utilisateur effectivement cliqué sur le lien.

+0

Merci beaucoup, mais d'une manière ou d'une autre cela ne m'exécute pas le script. Il redirige l'utilisateur, mais n'ajoute pas l'enregistrement à la table comme il le fait lors de l'utilisation du mousedown sans le succès. – Frank