IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Limiter l'utilisation d'une fonction ajax


Sujet :

AJAX

  1. #1
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut [AJAX] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre chevronné Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
                }
            }
        }
    }

  3. #3
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut
    Merci beaucoup !

    J'ai fait quelques modifications basées sur tes commentaires :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre chevronné Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    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
    Par défaut
    Euh... elle vient d'où cette constante ?

  5. #5
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="button"  id="Reload" alt="{L_CAPTCHA_REFRESH}" title="{L_CAPTCHA_REFRESH}" onclick="CaptchaReload({L_CAPTCHA_REFRESH_ALERT});" />
    deviens
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/04/2013, 14h10
  2. [AJAX] arreter l'exécution d'une fonction Ajax
    Par amine84 dans le forum AJAX
    Réponses: 13
    Dernier message: 09/09/2009, 15h52
  3. [AJAX] Stopper l'éxécution d'une fonction AJAX
    Par crazymonkey dans le forum AJAX
    Réponses: 2
    Dernier message: 13/08/2009, 14h16
  4. [AJAX] valider un formulaire avec une fonction ajax
    Par freums dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/02/2008, 11h34
  5. [AJAX] Envoi ou non d'un formulaire avec une fonction AJAX
    Par ohhh.gringo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/05/2007, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo