Clics sortants sans redirection avec Ajax

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Clics sortants sans redirection avec Ajax

par bravegars » 23 nov. 2008, 12:46

En fait la réponse était très simple, mais quand on sait pas, on galère.

Code : Tout sélectionner

<html> <head> <script language="javascript"> function goclic(externeClic){ //appel a XMLHttpRequest ... xhr = // etc... var lien = null; var idlien = externeClic; lien = "idlien="+idlien; xhr.open('POST', 'compteur_clics.php', true); // etc.... xhr.send(lien); } </script> </head> <body> <a href="le_lien_a_recuperer.html" onclick="goclic(this.href)">lien</a> </body> </html>
J'avais mis (this) sur le onclick alors qu'il fallait (this.href)... :)

par _alexmyself » 16 nov. 2008, 23:18

l'id:

Code : Tout sélectionner

var idlien = document.getElementById(idClic).id;
l'adresse:

Code : Tout sélectionner

var idlien = document.getElementById(idClic).href;
issus du post plus haut.

par bravegars » 12 nov. 2008, 19:20

Non rien de tout celà ne fonctionne.

J'ai testé le code qui fait appel au script php, apres
la requête XMLHttpRequest, tout fonctionne très bien.

Mon seul problème est la récupération du contenu de l'attribut HREF.
J'ai essayé plusieurs méthodes

Code : Tout sélectionner

var idlien = getAttribute('onclick'); var idlien = document.getAttribute('onclick'); var idlien = getAttribute('href'); var idlien = document.getAttribute('href'); var idlien = document.getElementByTagName('a');
entre autres... rien ne marche. :(
Je commence à désespérer...

Pourtant la méthode getAttribute('onclick') devrait fonctionner non ?
Je fais appel au script de la façon suivante

Code : Tout sélectionner

<a href="lien.html" onclick="fonction(this.href; return false)">LIEN</a>
Edit le 12/11/2008 à 18:20
J'ai réussi à récupérer tous les liens de la page, mais impossible
d'isoler le lien cliqué à l'intérieur de la fonction ajax.

Code : Tout sélectionner

var idlien = document.getElementsByTagName('a'); for(var i=0; i<idlien.length; i++){ alert(idlien[i].href) }
J'ai lu je ne sais combien d'exemples mais google est un tel fourre tout
qu'il est très difficile de trouver ce que l'on cherche.
Avec l'exemple précédent je récupère bien tous les liens quand je clique
sur un lien de la page.
Mais comment faire pour ne récupérer que le lien sur lequel on clique ?
Je ne désespère pas de trouver. :)
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par bravegars » 11 nov. 2008, 20:41

Non rien de tout celà ne fonctionne.

J'ai testé le code qui fait appel au script php, apres
la requête XMLHttpRequest, tout fonctionne très bien.

Mon seul problème est la récupération du contenu de l'attribut HREF.
J'ai essayé plusieurs méthodes

Code : Tout sélectionner

var idlien = getAttribute('onclick'); var idlien = document.getAttribute('onclick'); var idlien = getAttribute('href'); var idlien = document.getAttribute('href'); var idlien = document.getElementByTagName('a');
entre autres... rien ne marche. :(
Je commence à désespérer...

Pourtant la méthode getAttribute('onclick') devrait fonctionner non ?
Je fais appel au script de la façon suivante

Code : Tout sélectionner

<a href="lien.html" onclick="fonction(this.href; return false)">LIEN</a>
Edit: le 12/11/2008 à 18:20
J'ai réussi à récupérer tous les liens de la page, mais impossible
d'isoler le lien cliqué à l'intérieur de la fonction ajax.

Code : Tout sélectionner

var idlien = document.getElementsByTagName('a'); for(var i=0; i<idlien.length; i++){ alert(idlien[i].href) }
J'ai lu je ne sais combien d'exemples mais google est un tel fourre tout
qu'il est très difficile de trouver ce que l'on cherche.
Avec l'exemple précédent je récupère bien tous les liens quand je clique
sur un lien de la page.
Mais comment faire pour ne récupérer que le lien sur lequel on clique ?
Je ne désespère pas de trouver. :)

Désolé pour le post ci dessous, ce n'est pas du tout pour remonter le sujet ,-)
J'ai voulu rajouter la date de ma dernière édition et je n'ai pas réalisé que j'étais
pas connecter. Merci de l'effacer.

par chrislabricole » 11 nov. 2008, 14:17

Ah ! en relisant mieux ton code, je me suis aperçu que tu as fais ça :

Code : Tout sélectionner

var idlien = document.getElementById(idClic).value;
Pourquoi value ??
Si tu veux récupérer l'id du lien, tu fais ça :

Code : Tout sélectionner

var idlien = document.getElementById(idClic).id;
si tu veux récupéré directement le lien (du lien évidemment :P), tu fais ça :

Code : Tout sélectionner

var idlien = document.getElementById(idClic).href;
Pas plus simple :)

Sinon pour ce genre de choses, avec AJAX, je te conseil plutôt d'utiliser GET, qui est beaucoup plus rapide que POST, le POST, c'est surtout pour les données sensibles et longues (genre un formulaire complet, c'est pas beau de voir tout le formulaire dans l'adresse...).

par bravegars » 11 nov. 2008, 13:30

Je viens de regarder un peu les propriétés de AddEventListener,
il semble s'agir d'un écouteur de clics, je ne sais pas s'il peut m'être utile pour ce que je veux faire.
En effet il semble impossible de récupérer la valeur de mes liens avec cet élément.

J'ai besoin de récupérer la valeur contenu dans chaque lien,
c'est à dire l'url complète, pour la passer ensuite au script PHP
qui va incrémenter le compteur de clic de chaque site.

Mais merci pour ton aide chrislabricole. :)

par chrislabricole » 11 nov. 2008, 11:47

Ouh là, ça me semble compliquer d'utiliser ton evenement.
tout simple :)

Code : Tout sélectionner

var bloc = document.getElementById("une_div"); bloc.addEventListener("click", fonction_appelle, false); // "click" = onclick

par bravegars » 11 nov. 2008, 11:33

Ouh là, ça me semble compliquer d'utiliser ton evenement.

Depuis des heures et des heures que je cherche et je trouve pas la solution.
Si il y a des solutions mais elles me conviennent pas.
Par exemple ouvrir la page distante dans une autre fenêtre, mais alors
mon code xhtml n'est plus valide.

J'ai essayé de procéder ainsi :

Code : Tout sélectionner

<html> <head> <script language="javascript"> function goclic(idClic){ //appel a XMLHttpRequest ... xhr = // etc... var lien = null; var idlien = document.getElementById(idClic).value; lien = "idlien="+idlien; xhr.open('POST', 'compteur_clics.php', true); // etc.... xhr.send(lien); } </script> </head> <body> <a href="le_lien_a_recuperer.html" id="le_lien_a_recuperer.html" onclick="goclic(this.id)">lien</a> </body> </html>
Cela devrait fonctionner mais ça ne marche pas. Un coup de main serait le bienvenu. :)

par chrislabricole » 10 nov. 2008, 22:20

Tu as essayé avec AddEventListener ? :)

Clics sortants sans redirection avec Ajax

par bravegars » 10 nov. 2008, 21:13

Salut

Je voudrais compter le nombre de clics sur les liens externes de mon annuaire.
Eviter les redirections pour conserver des liens en dur.
Utiliser Ajax pour mettre à jour la base de donnée.

Je dois pour celà utiliser l'évenement onclick sur mes liens,
qui sont des liens dynamiques, et donc leur position sur les pages est variable.

J'ai essayé plusieurs javascripts mais je ne parviens pas à récupérer
la valeur des liens pour les passer ensuite au script PHP qui va mettre à jour
les champs dans la base de données.

Quel syntaxe dois-je utiliser pour que javascript reconnaisse tous les liens
dynamiques de mes pages ?

Et comment récupérer les urls de chaque lien avec javascript,
pour ensuite traiter les informations avec l'objet XMLHttpRequest ?

J'ai essayé de charger les différents liens au chargement de la page, mais ça ne fonctionne pas :

Code : Tout sélectionner

window.onload = function() { for (i = 0; i < document.links.length; i++) { document.links.item(i).onclick = function() { return track(this); } } }