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] Réponse non reçue du serveur


Sujet :

AJAX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut [AJAX] Réponse non reçue du serveur
    Bonjour,

    Je patauge depuis quelque temps avec un problème dans mon script Ajax. J'ai fait un code tout simple permettant d'exécuter un script PHP de manière asynchrone avec Ajax. Ce script PHP devrait tout simplement m'envoyer un petit mot ! Mais la valeur de responseText est toujours vide, responseXML toujours à 'null' et readyState toujours à 0....... Quelqu'un a une idée ? Je pense que c'est tout bête ! Mais là, je ne vois pas..... En mode synchrone, c'est Ok....

    Voici mes codes :

    La (ou plutôt les 2) fonction(s) 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
    31
    function ajax(action)
    {
    	// Création de l'objet de requête HTTP
    	var xhr;
    	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    	else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
     
        // Appel de la page traitant le formulaire
        xhr.open('POST', "../web/"+action, true);
     
        // Définition de la fonction qui sera appelée à chaque changement d'état de l'objet xhr.readyState
        xhr.onreadystatechange = function() { alert_ajax(xhr); };
     
        // Affichage de l'image indiquant qu'il faut patienter
        document.getElementById("wait").className="waitActif";
     
        // Envoi des données
        xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        xhr.send('donnee=valeéàéèàéur');
    }
     
    // Cette fonction est appelée à chaque changement d'état
    function alert_ajax(xhr)
    {
    	alert(xhr.readyState);
            alert(xhr.status)
        if (xhr.readyState == 4 && xhr.status==200) 
        {
        	alert(xhr.responseText);
        }
    }

    Le script PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
     
    sleep(2);
    echo 'test';
     
    ?>
    alert(xhr.readyState) me renvoi seulement 4 avec Chrome et seulement 1 avec IE. alert(xhr.status) me renvoie 0....

    Une p'tite idée ??

    Merci beaucoup d'avance !

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    alert(xhr.readyState);
    alert(xhr.status)
    Au moment de l'alert , le readyState et status pourrait déjà changer. Donc n'utilise pas un alert mais mets ses valeurs dans un div.

    A+.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    MERCI beaucoup !!!!!!! :-)

    Grâce à toi, j'ai trouvé mon problème !! En fait, la page se rechargeait à chaque fois, car j'avais mis le "onclick" sur un bouton "submit".... Donc, je n'avais jamais le temps de reçevoir la réponse renvoyée par la page PHP.

    Ah là là ! Bug de débutant....

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Pendant qu'on y est, j'ai un autre petit problème. Au lieu de reçevoir du texte, j'aimerais maintenant recevoir de l'XML en retour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Création du fichier XML de retour, pour Ajax
    header('Content-Type: text/xml; charset: UTF-8'); 
    echo '<?xml version="1.0" encoding="UTF-8" ?>\n';
    echo '<retour>true</retour>\n';
    responseXML me retourne 'null'......

    Est-ce un problème du XML mal formaté ? Ou est-ce autre-chose......

    Merci d'avance !

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Peut-on voir ton code actuel ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Oui, biensûr !

    J'ai uniquement modifié la fonction alert_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
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    function ajax(action)
    {
    	// Création de l'objet de requête HTTP
    	var xhr;
    	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    	else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
     
        // Appel de la page traitant le formulaire
        xhr.open('POST', "../web/"+action, true);
     
        // Définition de la fonction qui sera appelée à chaque changement d'état de l'objet xhr.readyState
        xhr.onreadystatechange = function() { alert_ajax(xhr); };
     
        // Affichage de l'image indiquant qu'il faut patienter
        document.getElementById("wait").className="waitActif";
     
        // Envoi des données
        xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        xhr.send('donnee=valeéàéèàéur');
    }
     
    // Cette fonction est appelée à chaque changement d'état
    function alert_ajax(xhr)
    {
        if (xhr.readyState == 4 && xhr.status==200) 
        {
        	alert(xhr.responseXML);
        	var docXML = xhr.responseXML;
        	var items = docXML.getElementsByTagName("retour")
     
        	// Désactivation du "sablier" 
        	document.getElementById("wait").className="waitNonActif";
     
        	// Pour chaque élment "retour"
        	for (i=0;i<items.length;i++)
        	{
        		alert (items.item(i).firstChild.data);
        	}
        }
    }
    alert(xhr.responseXML) me renvoi 'null'....

    Et le code XML créé par PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Création du fichier XML de retour, pour Ajax
    header('Content-Type: text/xml; charset: UTF-8'); 
    echo '<?xml version="1.0" encoding="UTF-8" ?>\n';
    echo '<retour>true</retour>\n';

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Je pense bien que tu auras plusieurs nœuds "retour", donc ton structure xml n'est pas correcte. Tu dois avoir un noeud racine.
    Essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Création du fichier XML de retour, pour Ajax
    header('Content-Type: text/xml; charset: UTF-8'); 
    echo '<?xml version="1.0" encoding="UTF-8" ?>\n';
    echo '<xml>';
    echo '<retour>true</retour>\n';
    echo '<retour>true</retour>\n';
    echo '<retour>true</retour>\n';
    echo '</xml>';

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Merci pour ta réponse !

    J'ai essayé avec ton code XML, mais c'est exactement pareil.....

    Avec responseText il me sort bien la chaine XML, mais avec responseXML, il me sort 'null'.......

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Pourquoi tu faits des alert à chaque instant? essaye de virer alert(xhr.responseXML). Ton fichier php est bien encodé en UTF-8 ?

    A+.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Ok, j'ai viré les alert ! Mais c'est pareil ! Pourquoi je les mets ? Ben pour débugger...... Mais tu as raison, je vais utiliser le débogueur de Chrome....

    Non, le fichier PHP était codé en Ansi... Je l'ai transformé en UTF-8, mais c'est pareil. Je l'ai remis en Ansi et ai écrit le copde XML de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    sleep(1);
     
    // Création du fichier XML de retour, pour Ajax
    header('Content-Type: text/xml;'); 
    echo '<?xml version="1.0" ?>\n';
    echo '<xml>\n';
    echo '<retour>true</retour>\n';
    echo '<retour>true</retour>\n';
    echo '<retour>true</retour>\n';
    echo '</xml>';
     
    ?>
    C'est toujours pareil ! Par contre, j'ai remarqué qu'avec FireFox, il me sort bien "[object XMLDocument]" au lieu de 'null' pour responseXML. Mais items.length vaut 0.....

    Par contre, même problème avec IE qu'avec Chrome....

    Problèmes d'encodage ?? Je ne m'y connais malheureusement pas trop......

    Merci d'avance !!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Voila, c'est bon !!! Tout marche maintenant niquel avec les 3 navigateurs ! Il fallait juste enlever le \n après "<?xml version="1.0" encoding="UTF-8" ?>". C'est le débogueur de Firefox qui m'a aidé !!!

    Avec ça, ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    sleep(1);
     
    // Création du fichier XML de retour, pour Ajax
    header('Content-Type: text/xml; charset: UTF-8'); 
    echo '<?xml version="1.0" encoding="UTF-8" ?>';
    echo '<xml>\n';
    echo '<retour>true</retour>\n';
    echo '<retour>true</retour>\n';
    echo '<retour>true</retour>\n';
    echo '</xml>';
     
    ?>
    MERCI beaucoup !!!

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    1-C'est plus sûr de travailler avec UTF-8, donc encode tes fichiers en UTF-8 sans BOM avec notepad++.
    2-Si je ne me trompe pas, les \n ne sont pas interprété dans des echo avec un single quote donc vire les.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Merci !

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

Discussions similaires

  1. UDP- Réponse non reçue
    Par Senkai dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 17/03/2015, 21h36
  2. Réponses: 5
    Dernier message: 29/08/2010, 12h20
  3. variables POST non reçues sur le serveur
    Par jacquesprogram dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/12/2009, 16h45
  4. Serveur HTTP, second réponse non renvoyée
    Par kobe1980 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 25/02/2007, 17h15
  5. SGBD SQL non orienté client/serveur
    Par Manue_Y dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/05/2005, 11h31

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