2015-04-20 1 views
2

Je voudrais construire un système de suivi pour une application Web construite dans CakePHP 2.x. L'idée est d'avoir tout le lien suivi ayant écrit comme ci-dessous:JavaScript Custom Tracker

<a 
    href="#" 
    class="track-click" 
    data-tracking='{ 
    "trackers": [ 
     { 
     "tracker": "----", 
     "eventId": "---", 
     "tracking_options": { 
      "eventTargetUrl": "---", 
      "props": [{ 
      "key": "----", 
      "value": "---" 
      }] 
     } 
     } 
    ] 
    }' 
/> 

Le javascript qui gère les demandes de piste devraient être en mesure de recueillir les informations qui réside à l'intérieur de l'attribut de suivi des données. Cela se ferait en attachant un événement click sur l'évènement onClick de la classe "track-click".

Voici comment j'utiliser le lien ci-dessus:

$('.track-click').click(function(e){ 
    //Lets grab the data thats within the data-tracking attribute and do something with it 
    var data = $(this).attr('data-tracking'); 
    alert(data.trackers); 
    e.preventDefault(); 
}); 

A ce moment présent si j'alerter ce qui précède, je me défini. . Si je mets $ (this) .attr («données de suivi) val() sur mon code, je reçois l'erreur ci-dessous:

TypeError: $(...).attr(...).val is not a function 

Quelle est la meilleure façon de manipuler les liens qui ont des données JSON comme montré ci-dessus?

+1

Avez-vous essayez de fermer en HTML le dernier attribut (-de suivi des données) avec guillemets simples, '? Il semble ne pas être fermé. –

+0

Fermez votre tag et mettez un guillemet simple à la fin de cette chaîne. – Sumit

Répondre

5

Vous devez utiliser

var data = JSON.parse($(this).attr('data-tracking')); 

Cela vous ramènera l'objet.

Sinon vous devez utiliser

var data = $(this).data('tracking'); 

.data() vous renvoyer l'objet. alors que .attr() va stringifier et retourner cet objet.

DEMO

+1

Merci mec c'est exactement ce que je voulais. Je pouvais voir [object Object] être alerté de mon navigateur qui est un bon signe .... :-) – Maximum86

+0

Great. Vous pouvez console.log et voir l'objet entier dans la console :) – mohamedrias

+1

Oui, je pouvais voir toutes les données plutôt que la notation [object Object] avec l'alerte. Merci beaucoup. J'essaye maintenant de construire l'implémentation pour mon suivi personnalisé ... :-) – Maximum86