Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour,

Voici ma fonction de compteur Ajax sur un lien avec un événement onclick

/* Création de la variable globale qui contiendra l'objet XHR */
function createXhrObject()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();

if (window.ActiveXObject)
{
var names = [
"Msxml2.XMLHTTP.6.0",
"Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP",
"Microsoft.XMLHTTP"
];
for(var i in names)
{
try{ return new ActiveXObject(names[i]); }
catch(e){}
}
}
window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
return null; // non supporté
}
xhr = createXhrObject();

function compteur(idr)
{
/* On crée l'objet XHR */
createXhrObject();
/* Définition du fichier de traitement */
var url = '/compteur.php?id='+ idr;
/* Envoi de la requête à la page de traitement */
xhr.open('GET', url, true);
xhr.send(null);
}

Le soucis c'est que ça fonctionne pas sur Safari pc 3.2.2, chrome 1.0.154.53, mais aucune erreurs.

Aucun soucis sur Firefox, IE, Opera.

Une idée d'où peu venir le problème ?

Merci de votre aide ;)

Modifié par ZuckBin
Posté

J'utilise un framework pour faire de l'ajax habituellement, mais le sujet m'intéresse, j'ai pas trop le temps de regarder, mais voila une piste :

Un bon truc pour parcourir les attributs en JS :

<script type="text/javascript">

for(var a in window)
{
document.write(a+" => "+window[a]+"<br>");
}
</script>

Je constate que XMLHttpRequest est utilisé avec chrome, du coup je trace :

document.write(window.XMLHttpRequest == null);

J'obtiens false, qu'obtiens tu sur ta page avec cette ligne ? (tu passes dans ta méthode compteur() ?)

Posté

J'obtiens aussi false avec cette commande

document.write(window.XMLHttpRequest == null);

Et j'ai pas compris le premier code, je l'ai installe, mais cela ne m'a pas aidé.

++

Posté (modifié)

J'ai peut-être, sur prototype il surcharge le type mime, essaie comme ça apres la création de ton objet :

xhr = createXhrObject();

if (xhr.overrideMimeType)
{
xhr.overrideMimeType("text/xml");
}

ça fonctionne ?

Modifié par SStephane
Posté

Je retente 2 trucs :)

D'une part :

xhr.overrideMimeType('text/xml; charset=UTF-8');

D"autre part :

xhr.open('GET', url, false);

le boolean défini si l'opération est asynchrone ou non; vérifie avec ça.

Posté (modifié)

Trop bien, ça fonctionne....

Pour rappel, voila le code complet:

/* Création de la variable globale qui contiendra l'objet XHR */
function createXhrObject()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();

if (window.ActiveXObject)
{
var names = [
"Msxml2.XMLHTTP.6.0",
"Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP",
"Microsoft.XMLHTTP"
];
for(var i in names)
{
try{ return new ActiveXObject(names[i]); }
catch(e){}
}
}
window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
return null; // non supporté
}

xhr = createXhrObject();
if (xhr.overrideMimeType)
{
xhr.overrideMimeType('text/xml; charset=UTF-8');
}

function compteur(idr)
{
/* On crée l'objet XHR */
createXhrObject();
/* Définition du fichier de traitement */
var url = '/compteur.php?id='+ idr;
/* Envoi de la requête à la page de traitement */
xhr.open('GET', url, false);
xhr.send(null);
}

Merci Beaucoup Stéphane ;)

Modifié par ZuckBin
Posté

Je veux allez plus loin, mais par manque de temps, je dois m'occuper d'autre chose pour le moment.

Je vous met ma fonction de compteur php.

L'idée est de protéger le compteur contre les clics multiples, par exemple en stockant Ip dans la base, et autoriser un seul clic par lien pendant 24h.

Fichier compteur.php appelé par le code xhr précédent.

<?php

echo"<META HTTP-EQUIV='Pragma' CONTENT='no-cache'>";

require_once('connections/ghv.php');

mysql_select_db($database_ghv, $ghv);

if($_SERVER) {
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$adress = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
$adress = $_SERVER['HTTP_CLIENT_IP'];
else
$adress = $_SERVER['REMOTE_ADDR'];
}
else {
if(getenv('HTTP_X_FORWARDED_FOR'))
$adress = getenv('HTTP_X_FORWARDED_FOR');
elseif(getenv('HTTP_CLIENT_IP'))
$adress = getenv('HTTP_CLIENT_IP');
else
$adress = getenv('REMOTE_ADDR');
}

$id_link=$_GET['id'];

$query="UPDATE table_id_links SET nb_clicks=nb_clicks+1 WHERE id_link='".$id_link."' ";
$compt = mysql_query($query, $ghv) or die(mysql_error());
?>

Si quelqu'un se lance, ça pourra servir à d'autres ;)

++

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...