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

JavaScript Discussion :

[AJAX] résultat différent en local et sur hébergeur


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut [AJAX] résultat différent en local et sur hébergeur
    Bonjour,

    Voilà, j'ai un script ajax qui vérifie en direct si le pseudo est déjà ou non utilisé. et tout fonctionne bien en local.

    exemple pseudo existant = titanique et je ne fais appel à ajax qu'à partir du 5eme caractere donc en local,
    titan, titani, titaniq, titaniqu, me renvoi 1 pour "pseudo libre" et titanique me renvoi 2 pour "pseudo pris" mais sur le site, titanique reste valable... ?

    J'ai pensé à un temps de réponse trop long ?
    Suis pas un pro de l'informatique mais le code fonctionne .. enfin en local...

    ---- Code ajax ---
    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
    32
    33
    function ajax(pseudo)
    {
     
    	var xhr = null; 
     
    	if(window.XMLHttpRequest) // Firefox et autres
    	   xhr = new XMLHttpRequest(); 
    	else 
    		if(window.ActiveXObject)
    		{ // Internet Explorer 
    			try { xhr = new ActiveXObject("Msxml2.XMLHTTP");} 
    			catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP");}
    		}
    		else 
    		{ // XMLHttpRequest non supporté par le navigateur 
    	  	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	   	xhr = false; 
    		}
        //on définit l'appel de la fonction au retour serveur
        xhr.onreadystatechange = function() { alert2_ajax(xhr);};
        //on appelle le fichier de reponse
    			xhr.open("GET", "../includes/verifpseudo.php?pseudo="+escape(pseudo), true);
        xhr.send(null);		
    }
     
    function alert_ajax(xhr)
    {
        if (xhr.readyState==4) 
        {
     
          document.getElementById('pseudobox').value = xhr.responseText;
        }
    }
    --- Code php ---
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?
    // VERIFICATION EN LIVE DU PSEUDO
     
    $result2 = mysql_query("SELECT pseudo FROM t_users WHERE pseudo='".$_GET["pseudo"]."'");
    if (mysql_num_rows($result2) >= 1)
    echo "2";//"Ce pseudo est déjà utilisé";
    else
    echo "1";//"Ce pseudo est libre";
    ?>
    --- code javascript ---
    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
     
    function verifPseudo(pseudo)
    {
      ok = Valide_char(pseudo,'abcdefghijklmnopqrstuvwxyz0123456789-_');
      if (ok !="oui") return;
      if(pseudo.value != '')
      {
        if(pseudo.value.length<5)
        {
          writediv('<span style="color:#cc0000"> <b>'+ '&nbsp;&nbsp;' +pseudo.value+' :</b> ce pseudo est trop court</span>');
         document.getElementById("pseudo_temp").value = "Pseudo trop court - minimum requis = 5 caractéres";
        }
       else 
       {
         ajax(pseudo.value);
         if(document.getElementById("pseudobox").value == 2)
         {
           writediv('<span style="color:#cc0000"><b>'+pseudo.value+' :</b> ce pseudo est dejà pris</span>');
           document.getElementById("pseudo_temp").value = "Ce pseudo est déjà utilisé, veuillez en choisir un autre.";
         }
         else 
         {
           writediv('<span style="color:#1A7917"><b>'+pseudo.value+' :</b> ce pseudo est libre</span>');
           document.getElementById("pseudo_temp").value = "";
         }
      }
    }
    else
      writediv('<span style="color:#cc0000">&nbsp;</span>');
    }
    Si quelqu'un à une idée....

    et j'ai aussi un autre blème mais un à la fois...

    Merci de vos réponses

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 412
    Points : 303
    Points
    303
    Par défaut
    En esperant ne pas avoir sauté une étape dans ton code, pourrait tu nous donner l'endroit ou tu appel ta fonction ajax
    http://mael-decoster.fr
    Développeur indépendant d'applications web
    http://www.easy-media.fr

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    ben c'est dans la function javascript verifpseudo(pseudo) ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else 
       {
         ajax(pseudo.value);
         if(document.getElementById("pseudobox").value == 2)
    Mais je pense sérieusement que c'est une question de temps de réponse, de plus j'ai mis pour tester et voir les reponses
    // header("Cache-Control: no-cache, must-revalidate");
    // header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    donc j'ai le fichier réponse dans le temp et quand je recommence alors ca fonctionne mais je dois le faire deux fois ....

  4. #4
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 82
    Points
    82
    Par défaut
    $result2 = mysql_query("SELECT pseudo FROM t_users WHERE pseudo='".$_GET["pseudo"]."'");
    Bon pour ce qui est de ta requète, quand tu compares des strings le mieux est d'utiliser like et non = .

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par kstou2001 Voir le message
    Bon pour ce qui est de ta requète, quand tu compares des strings le mieux est d'utiliser like et non = .
    Absolument pas !
    Pour un test de pseudo, c'est bien l'égalité stricte qu'il faut utiliser.

    @kstou2001 > Pour info, LIKE est l'équivalent de "contient la chaine", ce qui ne serait pas du tout approprié ...

    @chelguera > Problème de cache. Il faut que dans ta page qui génère la réponse Ajax, tu ajoutes les header "no-cache" avant de générer la réponse elle-même (à toi de trouver la syntaxe : PHP c'est pas mon truc )

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  6. #6
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 82
    Points
    82
    Par défaut
    autant pour moi! jdevais pas etre très bien reveillé ce matin.
    J'avais pas fais gaffe.

    L'erreur est humaine! mais une erreur comme la mienne peut couter cher

    Le pire c'est que pour une authentificaton j'utilise le = car on recherche une identité parfaite.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Bonjour,
    Absolument pas !
    Pour un test de pseudo, c'est bien l'égalité stricte qu'il faut utiliser.

    @kstou2001 > Pour info, LIKE est l'équivalent de "contient la chaine", ce qui ne serait pas du tout approprié ...

    @chelguera > Problème de cache. Il faut que dans ta page qui génère la réponse Ajax, tu ajoutes les header "no-cache" avant de générer la réponse elle-même (à toi de trouver la syntaxe : PHP c'est pas mon truc )

    A+
    Bon,
    - je vais mettre = car je vais changer la requête en = user_id et non pseudo
    - le no-cache donne exactement le même résultat, je l'ai mit en commentaire pour voir les résultats...
    sinon en php ca donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    header("Cache-Control: no-cache, must-revalidate");  
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    .....
    ?>
    Mais cela n'arrange toujours pas mon problème
    et j'espère que tout le monde est réveillé...

    Amicalement carlos

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Il faudrait lancer Ajax en synchrone, et non en asynchrone comme actuellement.
    Sinon, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ajax(pseudo.value);
         if(document.getElementById("pseudobox").value == 2)
         {
    au moment du test, ajax n'a certainement pas encore répondu. Par contre, à ton 2° essai (sans rechargement) la valeur testée à cette endroit est celle ramenée lors du 1° essai.

    (d'ailleurs tu devrais tester =="2" car une value est de type caractère)

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    Je perd mon latin....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(xhr.responseText == "non")
    {
      writediv('<span style="color:#cc0000">ce pseudo est dejà pris</span>');
    				document.getElementById  ("pseudo_temp").value = "Ce pseudo est déjà utilisé, veuillez en choisir un autre.";
    }
    else 
    {
      writediv('<span style="color:#1A7917"> ce pseudo est libre</span>');
    				document.getElementById("pseudo_temp").value = "";
    }
    ps j'ai changé le résultat de la requête en oui ou non, et fait un test directement dans le retour ajax...

    alors,
    verifpseudo.php?pseudo=titanique ==> reponse = non (pas libre)
    verifpseudo.php?pseudo=titaniqu ==> reponse = oui (libre)

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par chelguera Voir le message
    et fait un test directement dans le retour ajax...
    C'est ce qui résoud le problème signalé ci-dessus (et pas le changement des valeurs en oui/non )
    Maintenant ton test dépend du retour d'Ajax alors que ce n'était pas le cas avant.

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    oui mais pourquoi le test est toujours # de "non" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(xhr.responseText == "non")
    {
      writediv('<span style="color:#cc0000">ce pseudo est dejà pris</span>');
    				document.getElementById  ("pseudo_temp").value = "Ce pseudo est déjà utilisé, veuillez en choisir un autre.";
    }
    else 
    {
      writediv('<span style="color:#1A7917"> ce pseudo est libre</span>');
    				document.getElementById("pseudo_temp").value = "";
    }

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par chelguera Voir le message
    oui mais pourquoi le test est toujours # de "non" ?
    Ce n'est pas ce que tu as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    verifpseudo.php?pseudo=titanique ==> reponse = non (pas libre)
    verifpseudo.php?pseudo=titaniqu ==> reponse = oui (libre)
    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Ce n'est pas ce que tu as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    verifpseudo.php?pseudo=titanique ==> reponse = non (pas libre)
    verifpseudo.php?pseudo=titaniqu ==> reponse = oui (libre)
    A+
    Je sais, la réponse de retour est correcte donc ma question est pourquoi le test est toujours négatif ?

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par chelguera Voir le message
    Je sais, la réponse de retour est correcte donc ma question est pourquoi le test est toujours négatif ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    alert('/' + xhr.responseText + '/');
    if(xhr.responseText == "non")
    {
      writediv('<span style="color:#cc0000">ce pseudo est dejà pris</span>');
    				document.getElementById  ("pseudo_temp").value = "Ce pseudo est déjà utilisé, veuillez en choisir un autre.";
    }
    te donneras peut-être la réponse ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    ben oui.... alors la réponse est non et bizarement le test reste négatif.....

    c'est le test .... if(xhr.responseText == "non")
    n'y a-t-il pas un strcmp en javascript ? j'ai l'impression que je compare des carottes et des bananes.. pour moi xhr.responseText est un string ..

    Je pense que c'est de ce côté là qu'il faut chercher.

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par chelguera Voir le message
    Je pense que c'est de ce côté là qu'il faut chercher.
    Non, c'est juste que xhr est une variable locale de ta fonction Ajax.
    Donc elle n'existe pas au moment de ton test dans verifPseudo().

    Je te conseille d'activer les erreurs de script de ton nav (car il y a une erreur)

    Tu ne te serais pas poser cette question ....

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    bien non, il n'y a pas d'erreur car c'était déjà activé....

    voici ce que j'ai fait, et on voit bien que c'est le test qui foire avec ceci
    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
     
     
    if (xhr.readyState==4) 
    {
      if(xhr.responseText == 'non')
      {
        alert('reponse non = '+xhr.responseText);
        writediv('<span style="color:#cc0000">ce pseudo est dejà pris</span>');
       document.getElementById("pseudo_temp").value = "Ce pseudo est déjà utilisé, veuillez en choisir un autre.";
      }
      else 
      {
        alert('reponse oui = '+xhr.responseText);
        writediv('<span style="color:#1A7917"> ce pseudo est libre</span>');
        document.getElementById("pseudo_temp").value = "";
      }			
      document.getElementById('pseudobox').innerHTML = xhr.responseText;
    }
    Résultats : alert donne "reponse oui = oui" tant que c'est oui mais quand c'est non j'ai alors "reponse oui = non"
    par contre la derniere ligne elle m'affiche dans le pseudobox nondonc le résultat est bien ...là il n'y a pas photo...

    donc c'est bien le test qui foire mais pourquoi ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    et voilà que je l'ai résolu car convaincu que la comparaison était fausse

    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
     
    function alert_ajax(xhr)
    {	
      var retour='';
      if (xhr.readyState==4) 
      {
        a = xhr.responseText.substring(0,1);
        if(retour == 'n')
        {
          writediv('<span style="color:#cc0000">ce pseudo est dejà pris</span>');
         document.getElementById("pseudo_temp").value = "Ce pseudo est déjà utilisé, veuillez en choisir un autre.";
        }
        else 
        {
          writediv('<span style="color:#1A7917"> ce pseudo est libre</span>');
          document.getElementById("pseudo_temp").value = "";
        }			
      }
    }
    Qui sait pourquoi ? mais cette fois cela fonctionne

    Merci à tous ceux qui ont lu ce post et essayer de m'aider

    Amicalement Carlos

  19. #19
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par chelguera Voir le message
    et voilà que je l'ai résolu car convaincu que la comparaison était fausse
    Ne t'emballe pas trop vite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      var retour='';
      if (xhr.readyState==4) 
      {
        a = xhr.responseText.substring(0,1);
        if(retour == 'n')
    Ton test ne fonctionne pas (tu ne test pas la bonne variable), et je pense que tu cherches du mauvais côté.

    Mais bon ... je t'ai déjà donné mon avis ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  20. #20
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Décembre 2004
    Messages : 73
    Points : 31
    Points
    31
    Par défaut
    non je m'emballe pas.... j'ai fait le copier coller du code pendant que je changeait la variable 'a' en 'retour'... c'est plus clair retour que a

    Et afin de ne pas m'emballer trop vite, les test sur le serveur sont positifs.


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

Discussions similaires

  1. Encodage différent en local et sur serveur
    Par toufik135 dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 25/05/2015, 20h22
  2. Comportement différent en local et sur serveur
    Par CinePhil dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/03/2012, 15h41
  3. [SimpleXML] 3 résultats différents sur 3 hébergeurs
    Par elcoyotos dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/01/2012, 08h15
  4. [CR 2008] Rendu différent en local et sur serveur
    Par ftpcrazy dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/11/2009, 13h30
  5. Polices différentes en local et sur mon hébergement
    Par flaydeer dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 20/06/2007, 10h14

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