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] responseText OK mais affiche undefined


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut [AJAX] responseText OK mais affiche undefined
    Bonjour tout le monde,

    Voilà je viens vers vous car j'ai un souci avec une fonction AJAX

    En gros voici ce que je cherche à faire :
    Afficher les message d'erreur générer par JavaScript directement dans la langue de l'utilisateur

    Avec PHP pas de souci, on définit des fichier langue contenant des constante, mais je ne connait pas de solution pour javascript

    Je me suis donc dit que j'allait contourner le problème à l'aide d'AJAX, j'ai donc créer des fichier langue de constante à cet éffet

    Voici mes sources de test
    Fichier constante_fr.php ( il existe aussi en "en" et est charger par rapport à une variable de session PHP )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    define('JS_ERR1',"Erreur n°1");
    define('JS_ERR2',"Erreur n°2");
    define('JS_ERR3',"Erreur n°3");
    etc..
    ?>
    Ensuite le fichier appelé par la fonction AJAX "returnConst.php"
    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
     
    <?php
    include('constante_' . $_SESSION['langue'] . '.php');
     
    function returnConst($cst){
        $csts = get_defined_constants();
        return (array_key_exists($cst,$csts)) ? $csts[$cst] : 'Erreur interne';
    }
     
    $r = (isset($_GET['cst'])) ? returnConst($_GET['cst']) : "Erreur interne";
    echo utf8_encode($r);
     
    // Petit test
    // echo returnConst('JS_ERR1');
    // Test OK
    ?>
    Donc coté PHP ca fonctionne, maintenant la fonction 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
     
    /* Création d'un objet XMLHttpRequest comptible IE,FF et lambda */
    function Xhr(){
        if(window.XMLHttpRequest){ 
            return new XMLHttpRequest(); 
        }
        else if(window.ActiveXObject){ 
            return new ActiveXObject("Microsoft.XMLHTTP"); 
        }
        else{ 
            alert('Vous devez activer Javascript dans les options de votre navigateur'); 
        }
    }
     
    /* Récupération de l'erreur et ecriture dans un div */
    /* cst = La constante à aller chercher ( string ) */
    /* cbl = div ciblé pour l'ecriture ( objet ou string ) */
    function errXhr(cst,cbl){
        var obj = (cbl.style) ? cbl : document.getElementById(cbl);
        var ajx = Xhr();
        var file = "returnConst.php?cst="+cst;
        ajx.open("GET", file, false);
        ajx.send(null);
        var ret = ajx.responseText; // Réponse OK
        obj.innerHTML = ret; // ET ICI ECRIT UNDEFINED AU LIEU DU MESSAGE
        // obj.innerHTML = ajx.responseText; // IDEM "undefined"
     
        /* Test 1 */
        // alert(ret); => OK affiche bien l'erreur dans l'alerte
     
        /* Test 2 */
        // alert(obj.innerHTML); => OK affiche bien l'erreur dans l'alerte
    }
    Source HTML de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <html>
        <head>
            <title>Test</title>
            <script type="text/javascript" src="xhr.js"></script>
        </head>
        <body>
            <div id="confirm"></div>
            <input type="button" id="test" value="Tester" onclick="errXhr('JS_ERR1','confirm');" />
        </body>
    </html>
    Voilà, donc au clic sur le bouton il doit m'afficher la valeur de la constante "JS_ERR1" qui est "Erreur N°1" dans le div confirm

    Les différent alert que je fait me retourne bien "Erreur N°1"
    1 - on fait un alert sur la variable JS "ret", ok "Erreur N°1" est bien dans le message d'alerte
    2 - on fait un alert sur le contenu html de l'objet "innerHTML" après avoir ecris le message, ok "Erreur N°1" est bien dans le message d'alerte
    3 - on ouvre la console firebug et on regarde le retour, ok "Erreur N°1" est bien le retour

    Mais voilà au lieu d'ecrire le message d'erreur dans le div "confirm", il écrit "undefined"

    Je ne voi vraiment pas d'ou peut venir le problème, puisque tout les test me retourne bien l'erreur souhaiter, mais il m'ecris toujours undefined dans le div

    D'avance merci de votre aide, si vous ne comprennez rien à ce que je raconte, poser vos question je tacherai d'y répondre le plus précisément possible

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Salut,
    tu fais l’erreur classique du débutant en Ajax… Y’a une analogie que j’aime bien, c’est les grosses boules en plastique dur qui mettent du temps à retomber quand on les lance. Les requêtes Ajax c’est pareil : on les lance, et la réponse met un certain temps avant d’arriver.

    Ton deuxième alert fonctionne par pur hasard. Si d’aventure il y a, un jour, une lenteur inhabituelle sur le réseau, ça se mettra à ne plus marcher. Pour être sûr de capter la réponse quand elle arrive, il faut mettre une fonction de rappel sur le onreadystatechange. En plus je pense que tu le savais déjà

    Enfin, c’est en faisant des erreurs qu’on apprend, n’est-ce pas ?



    Au fait, je te conseille d’utiliser console.info() ou console.log() à la place de alert().
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut
    je suis en synchrone, je pensait qu'en synchrone le script continuait uniquement quand la requête ajax était finie et qu'une réponse était effective

    devrais-je donc passer en asynchrone et utiliser le onreadystatechange ?

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    En synchrone ? Bizarre ça… Si tu as besoin du synchrone, je sui presque sûr qu’il y a une erreur de conception au départ.

    Mais essaye déjà d’utiliser onreadystatechange en synchrone, peut-être qu’il y a quand même besoin.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut
    MmMmM, bizar, j'ai viré les test qui était mit en commentaire et maintenant ca fonctionne :s, comprend pas mais bon le principale je pense est que ca fonctionne parfaitement maintenant, toujours en synchrone et sans onreadystatechange.

    mes commentaires était pourtant bien encadré, enfin, merci d'avoir prix le temps de m'aider xD

    je le met en resolu, encore merci xD

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

Discussions similaires

  1. [AJAX] ResponseText renvoie Undefined
    Par d-Rek dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/04/2007, 08h57
  2. [AJAX] responseText ou responseXML ?
    Par Greggggggg dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 29/08/2006, 09h46
  3. DVD plein... mais affiché vide !!!
    Par Pahcixam dans le forum Périphériques
    Réponses: 5
    Dernier message: 20/05/2006, 13h08
  4. [AJAX] responseText est vide
    Par julien.63 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 18/04/2006, 16h28
  5. Réponses: 7
    Dernier message: 21/03/2006, 23h01

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