Condition de course AJAX GET?

Je tente de suivre les événements lorsque les liens sont cliqués sur mon site selon une méthode semblable à celle-ci.

<a href="/example" class="track">Example</a> <script type="text/javascript"> jQuery(function($) { // track clicks on all anchor tags that require it $('a.track').live('click', function(e) { // send an AJAX request to our event tracking URL for the server to track it $.get('/events/track', { url: $(this).attr('href'), text: $(this).text() }); }); }); </script> 

Le problème que je présente est qu'une nouvelle charge de page interrompt la requête AJAX, et parfois ces événements ne sont pas suivis. Je sais que Google Analytics possède une fonction _trackPageview qui peut être associée aux événements onclick, et cela ne semble pas être un problème pour cela. Je me demande ce qui est différent de leur appel contre le mien que je vois cette condition de course, et GA n'est pas. par exemple:

 <a href="/example" onclick="javascript:pageTracker._trackPageview('/click/example');">Example</a> 

Notez que je ne suis pas préoccupé par le résultat de la requête AJAX … Je veux simplement que le ping du serveur avec le fait qu'un événement s'est produit.

(En outre, je m'attends à ce que je reçoive au moins une réponse qui indique simplement suivre le nouveau chargement de la page du côté du serveur, pas le côté client. Ce n'est pas une réponse acceptable pour cette question. Je cherche quelque chose comme comment La fonction trackPageview Google Analytics fonctionne sur l'événement de clic des balises d'ancrage, quelle que soit la nouvelle page chargée.)

Exécuter la méthode trackPageview de Google via un proxy comme Charles montre que les appels à trackPageview( ) demandent un pixel des serveurs de Google avec différents paramètres définis, c'est ainsi que la plupart des packages d'analyse terminent la mise en œuvre de ces fonctionnalités (Omniture fait la même chose).

Fondamentalement, pour contourner les demandes anormales qui ne sont pas complétées, le client demande une image et supprime les paramètres passés dans ces demandes du côté du serveur.

Pour votre fin, vous devriez implémenter la même chose: écrivez une méthode d'utilité qui demande une image de votre serveur, en transmettant les informations qui vous intéressent via les paramètres d'URL (quelque chose comme /track.gif?page=foo. Html & link = Cliquez% 20Me & bar = baz); Le serveur enregistrait alors ces paramètres dans la base de données et renvoyait le gif.

Ensuite, il s'agit simplement de découper et de découper les données que vous avez collectées pour générer des rapports.

Mat,

Si vous voulez simplement vous assurer que la demande de pixel de suivi est effectuée et que vous ne dépendez pas de la réponse, il vous suffit de document.write pour l'image de pixel de suivi.

Et vous pouvez faire le document. Écrivez dans votre gestionnaire onclick.

La condition de course AFA entre href et onclick handler of anchor element concerne l'ordre est bien défini.

Le script du gestionnaire d'événements est exécuté d'abord, l'action par défaut se déroule ensuite (dans ce cas, le gestionnaire par défaut est href) (Source: Href et onclick problème dans le lien d'ancrage )

Mais oui, si vous dépendez de la réponse de la demande de suivi au serveur, vous devrez le rendre synchrone.

L'option suggérée serait d'appeler une fonction javascript pour enrouler les gestionnaires de ligne déjà définis, puis dans l'ordre de faire les appels. Assurez-vous que votre demande de suivi n'est pas asynchrone.

Bien qu'il soit suggéré de ne pas dépendre de la réponse de la demande de pixel de suivi.