Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/04/2011, 00h25   #1
Membre éprouvé
 
Avatar de Gecko
 
Homme Antoine B
Développeur Web
Inscription : février 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Antoine B
Âge : 27
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 106
Points : 409
Points : 409
Envoyer un message via MSN à Gecko Envoyer un message via Skype™ à Gecko
Par défaut Limiter l'utilisation d'une fonction ajax

Bonjour tout le monde !!

Je sèche sur un problème sûrement tout simple. Dans un premier temps le code :
Code javascript :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
document.getElementById("Reload").type = "button";
var ReloadTimer = (10*1000); // Temps en secondes
var ReloadCount = 0;
function CaptchaReload()
{
	if(ReloadCount != 0) { setTimeout("CaptchaReload()",ReloadTimer); }
	var captcha = document.getElementById("captcha");
	var data = "";
	var XhrObj = null;
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try { XhrObj = new ActiveXObject("Msxml2.XMLHTTP");	}
			catch(e) { XhrObj = new ActiveXObject("Microsoft.XMLHTTP");	}
		} else { XhrObj = new XMLHttpRequest(); }
	} else { alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest..."); }
	XhrObj.open("GET", "/ajax/captcha.ajax.php", true);
	XhrObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	XhrObj.send(data);
	XhrObj.onreadystatechange = function()
	{
		if (XhrObj.readyState == 4 && XhrObj.status == 200)
		{
			captcha.src = XhrObj.responseText;
			ReloadCount ++;
		}
	}
}

Je cherche a limiter l'appel de à la fonction ReloadCaptcha pour que l'utilisateur ne puisse l'appeler qu'une fois toutes les x secondes. C'est dans le but d'éviter de surcharger mon serveur.

Là manque de bol, ça me rafraichi l'image toutes les 10 secondes automatiquement :p

Si quelqu'un a une idée pour que ça fonctionne comme je le souhaite

Merci d'avance !
Gecko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2011, 01h52   #2
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
var ReloadTime = (10*1000); // Temps en secondes
var ReloadFlag = 0;
function CaptchaReload()
{
    if(ReloadFlag === 0) {
        ReloadFlag = 1; // une requete va être envoyée, on bloque les prochaines...
        setTimeout(function(){ ReloadFlag=0; },ReloadTime); // pour le temps donné !
        var captcha = document.getElementById("captcha");
        var data = "";
        var XhrObj = null;
        if (window.XMLHttpRequest || window.ActiveXObject) {
            if (window.ActiveXObject) {
                try { XhrObj = new ActiveXObject("Msxml2.XMLHTTP");    }
                catch(e) { XhrObj = new ActiveXObject("Microsoft.XMLHTTP");    }
            } else { XhrObj = new XMLHttpRequest(); }
        } else { alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest..."); }
        XhrObj.open("GET", "/ajax/captcha.ajax.php", true);
        // je n'y touche pas, mais il y a un problème là : c'est une requete POST ou GET ??!
        XhrObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        XhrObj.send(data); // pareil ! on ne passe rien dans le send si c'est du GET !
 
        XhrObj.onreadystatechange = function() // en général on définit ça avant d'envoyer la requete...
        {
            if (XhrObj.readyState == 4 && XhrObj.status == 200)
            {
                captcha.src = XhrObj.responseText;
            }
        }
    }
}
nadox est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/04/2011, 12h55   #3
Membre éprouvé
 
Avatar de Gecko
 
Homme Antoine B
Développeur Web
Inscription : février 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Antoine B
Âge : 27
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 106
Points : 409
Points : 409
Envoyer un message via MSN à Gecko Envoyer un message via Skype™ à Gecko
Merci beaucoup !

J'ai fait quelques modifications basées sur tes commentaires :
Code javascript :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var ReloadFlag = 0;
function CaptchaReload()
{
    if(ReloadFlag === 0) {
        ReloadFlag = 1;
        setTimeout(function(){ ReloadFlag = 0; },5000);
        var captcha = document.getElementById("captcha");
        var error = document.getElementById("error");
        var XhrObj = null;
        if (window.XMLHttpRequest || window.ActiveXObject) {
            if (window.ActiveXObject) {
                try { XhrObj = new ActiveXObject("Msxml2.XMLHTTP");    }
                catch(e) { XhrObj = new ActiveXObject("Microsoft.XMLHTTP");    }
            } else { XhrObj = new XMLHttpRequest(); }
        } else { alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest..."); }
        XhrObj.onreadystatechange = function() // en général on définit ça avant d'envoyer la requete...
        {
            if (XhrObj.readyState == 4 && XhrObj.status == 200)
            {
                captcha.src = XhrObj.responseText;
            }
        }
		XhrObj.open("GET", "/ajax/captcha.ajax.php", true);
        XhrObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        XhrObj.send();
    } else { alert("{L_CAPTCHA_REFRESH_LIMIT}"); }
}

J'ai défini le flag pour le chargement de la page, sinon ça retourne une erreur qui fait planter le script.

Pour le statut je l'ai mis avant la requête comme tu me l'as recommandé, même si je ne vois pas trop la différence pour l'instant.

Par contre, j'ai un nouveau problème, je ne parviens pas à récupérer la valeur de ma constante {L_CAPTCHA_REFRESH_LIMIT}. Comme la plateforme que je dev est multilingue c'est assez embêtant :p

Edit: J'ai tenté de faire passer le contenu de ma constante directement dans la fonction, CaptchaReload(contenu de la constante), mais apparemment JS n'aime pas vraiment ça.
Gecko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2011, 13h28   #4
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Euh... elle vient d'où cette constante ?
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2011, 13h54   #5
Membre éprouvé
 
Avatar de Gecko
 
Homme Antoine B
Développeur Web
Inscription : février 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Antoine B
Âge : 27
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 106
Points : 409
Points : 409
Envoyer un message via MSN à Gecko Envoyer un message via Skype™ à Gecko
Elle est définie dans un fichier langue, en gros c'est un gros array PHP et juste avant l'affichage de mes template je parse le tout.

Ce qui fait que
Code html :
1
2
 
<input type="button"  id="Reload" alt="{L_CAPTCHA_REFRESH}" title="{L_CAPTCHA_REFRESH}" onclick="CaptchaReload({L_CAPTCHA_REFRESH_ALERT});" />
deviens
Code html :
1
2
 
<input type="button" id="Reload" alt="Rafraîchir l'image antispam" title="Rafraîchir l'image antispam" onclick="CaptchaReload(Vous ne pouvez changer l'image qu'une fois toutes les 5 secondes);"/>

Le problème c'est que le fait que mon texte ai des apostrophes fait planter le script JS qui me retourne qu'il manque une fermeture de parenthèse a la ligne 1 du code HTML.

Edit: Ah bah non, ce sont pas les apostrophes qui sont en cause, avec une phrase bateau ça plante aussi x:

Edit 2: C'est bon, j'ai trouvé, il fallait bidouiller pour que JS reçoive les données encapsuler entre des apostrophe, je le savais pourtant mais je viens juste de percuter :p

Merci pour ton aide Nadox
Gecko est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h36.


 
 
 
 
Partenaires

Hébergement Web