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 :

Erreur d’analyse XML : mal formé


Sujet :

AJAX

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Points : 50
    Points
    50
    Par défaut Erreur d’analyse XML : mal formé
    Bonsoir à tous.
    Alors voilà, j'ai ce code js :
    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
     
    var post = getHttpRequest();
      post.onreadystatechange = function () {
    	if (post.readyState === 4) {
    	  if (post.status === 200) {
    		alert(post.responseText);
    	  } else {
    		alert("error");
    	  }
    	}
      }
     
    function remove_event (event){
    	var data = new FormData();
    	data.append('asup', event);
     
     
    	post.open('POST', 'sup.php', true);
    	post.setRequestHeader('X-Requested-With', 'xmlhttprequest');
    	post.send(data);
    }

    La fonction getHttpRequest se contente de créer un objet httpRequest.
    J'ai un simple bouton qui appelle la fonction remove_event au onClick.

    Le fichier "sup.php contient simplement :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
        var_dump($_POST);
    ?>

    Juste pour vérifier que mon appel AJAX fonctionne avant d'aller plus loin (l'objectif sera de modifier une base de donnée).

    Seulement, lorsque je clique sur le bouton, dans la console ce message d'erreur apparaît :
    Erreur d’analyse XML : mal formé
    Emplacement : http://localhost/php/sup.php
    Numéro de ligne 1, Colonne 6 :

    Je ne comprends pas trop d'où cela peut venir étant donné le contenu de mon fichier php ...

    Merci pour votre aide !

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Regarde la source du XML, ou regarde la réponse brute dans l’onglet réseau de la console. Ça vient probablement d’un problème de configuration du serveur. Je pense qu’il renvoie le code source PHP, et le navigateur ne comprend pas le prologue <?php, il croit que c’est un prologue <?xml mal écrit.

    Tu peux aussi essayer ceci : ajoute un en-tête Content-Type: text/plain avant de faire var_dump pour forcer le navigateur à afficher la réponse comme du texte.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    header('Content-Type: text/plain');
    var_dump($_POST);

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Points : 50
    Points
    50
    Par défaut
    L'ajout du header ne fonctionne pas. Je suis en localhost sur xampp.

    Lorsque j'analyse la requête dans l'onglet réseau, le code d'état est à 200. En fait on dirait qu'elle fonctionne.
    Le "alert" ligne 6 dans le js s'affiche avec un contenu qui semble être bon, en revanche côté php rien ne se passe, $_POST est toujours vide .

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par auloma Voir le message
    L'ajout du header ne fonctionne pas.
    Peux-tu préciser « ne fonctionne pas » ?

    Le "alert" ligne 6 dans le js s'affiche avec un contenu qui semble être bon
    Quel est ce contenu ?

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Points : 50
    Points
    50
    Par défaut
    Je voulais dire que l'erreur est toujours présente dans la console.

    Le alert affiche : string(1) "1", 1 étant la valeur du paramètre "event" de la fonction remove_event.
    C'est le contenu du var_dump() dans le php.

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Je suis surpris, l’ajout du header aurait dû faire disparaitre le message d’erreur.
    Une autre solution est d’ajouter overrideMimeType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	post.open('POST', 'sup.php', true);
    	post.overrideMimeType('text/plain');
    	post.setRequestHeader('X-Requested-With', 'xmlhttprequest');
    	post.send(data);
    Dans la console réseau, clique sur une ligne de requête pour accéder aux détails et vérifie le Content-Type de la réponse du serveur.

    D’autre part, je ne comprends pas pourquoi tu dis que $_POST est vide alors que tu vois la valeur de ton paramètre event ?

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Points : 50
    Points
    50
    Par défaut
    L'erreur dans la console a disparu grâce à l'ajout de post.overrideMimeType('text/plain');.
    Le content-type est : "text/html; charset=UTF-8".
    Merci !

    En fait ce que je voulais dire c'est que le serveur renvoie bien une valeur de $_POST["asup"], mais que lorsque je vais dans la page elle même (donc quand j'ouvre /php/asup.php dans mon navigateur), le var_dump est toujours à 0, comme si asup n'existait pas. Idem lorsque je l'actualise après avoir fait appel à remove_event().
    Du coup, j'en viens à me demander s'il est possible de modifier une base de donnée dans sup.php. Car actuellement cela ne fonctionne pas (et après vérifications je ne pense pas que cela vienne de mon code php). Qu'en est-il ?

    Merci pour toutes vos réponses !

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par auloma Voir le message
    En fait ce que je voulais dire c'est que le serveur renvoie bien une valeur de $_POST["asup"], mais que lorsque je vais dans la page elle même (donc quand j'ouvre /php/asup.php dans mon navigateur), le var_dump est toujours à 0, comme si asup n'existait pas. Idem lorsque je l'actualise après avoir fait appel à remove_event().
    Il faut bien comprendre que GET et POST sont des méthodes de requête. Quand tu navigues à l’adresse /php/asup.php avec ton navigateur (ou quand tu rafraîchis la page), celui-ci fait une requête GET, et donc c’est normal que ton script PHP ne voie pas de paramètre POST à ce moment.
    À chaque requête différente, le serveur fait une réponse différente ; et chaque réponse différente est une nouvelle exécution de ton script PHP. Il n’y a pas de « continuité » des variables d’une exécution à l’autre. En fait, c’est un peu le boulot des bases de données d’assurer cette continuité (ça ou les sessions).

    Pour tester le fonctionnement de ton script en POST, tu as deux solutions :
    • utiliser l’objet ajax que tu as déjà, et examiner les détails des réponses dans la console ;
    • écrire un formulaire HTML classique, par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      <form method="post" action="/php/asup.php">
        <input type="text" name="asup" />
        <input type="submit" />
      </form>

    Note que le formulaire n’envoie pas l’en-tête X-Requested-With.

    Du coup, j'en viens à me demander s'il est possible de modifier une base de donnée dans sup.php.
    Absolument. Il faut juste que tu utilises l’objet ajax ou le formulaire HTML. Essaye

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Points : 50
    Points
    50
    Par défaut
    J'ai réussi à résoudre le souci. Merci pour votre aide pour vos éclairages en tout cas !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/03/2020, 22h35
  2. [PHP][XSLT] Erreur Bizarre : Balise non fermée (XML mal formé [ndr])
    Par @min@ dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 09/05/2007, 11h06
  3. [XML] Erreur d'analyse XML : mal formé
    Par kespan dans le forum Valider
    Réponses: 2
    Dernier message: 15/01/2007, 18h57
  4. Erreur d'analyse XML : mal formé
    Par arsenik7 dans le forum Valider
    Réponses: 2
    Dernier message: 16/11/2006, 10h40
  5. [SQL] Erreur d'analyse XML : mal formé
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/08/2006, 09h10

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