AJAX/JS responseXML retourne NULL

Résolu
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023 - 24 mai 2023 à 19:22
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023 - 25 mai 2023 à 15:30

Bonjour,

Je suis en train d'apprendre les requêtes asynchrones en javascript avec AJAX afin de réactualiser certaines portions de ma page. Il y a quelque chose que je ne comprends pas par rapport à la réponse du serveur avec responseXML, je ne reçois rien ou plutot je récupère null. C'est vraiment un code tout simple de test, le voici :

let xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
    if(xhr.readyState == DONE && xhr.status == 200){
        let doc = xhr.responseXML;
        alert(doc);
    }
}

xhr.open('GET', 'index.php');
xhr.send(null);

Je tiens à dire que je teste mon code sur un serveur web local qui est WampServer


Windows / Chrome 113.0.0.0

A voir également:

7 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 mai 2023 à 19:25

Bonjour

1 - que ta fiche la console sur la ligne concernant ton appel Ajax ? ( Pour plus de facilité pour débugger de l'Ajax, je t'invite fortement à utiliser Firefox et, dans l'onglet console de ton navigateur Internet, bien pensé à cocher la case xhr )

2 - que contient ton fichier index.php ? 


0
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023
Modifié le 24 mai 2023 à 19:59

Merci de ta réponse rapide ^^

Je suis sur Chrome, je suis allé dans les outils de développement, section "Network" puis j'ai cliqué sur "Fetch/XHR", voici le screen, je remarque que j'ai bien une réponse et que index.php a bien été renvoyée avec le status 200 ->

La page contient pas mal de code, HTML/CSS(externe)/PHP/SQL et la partie JS qui traite de XMLHttpRequest

AJAX sert ici à actualiser la partie messages privés qui se déploie avec l'icone représentant un message en bas à droite

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 mai 2023 à 20:36

Le script PHP que tu appelles dans ton AJAX ne doit retourner QUE les informations que tu veux récupérer et non toute une page html ( qui plus est.. qui semble la même que tu utilises pour déclencher ton appel ajax...)

En gros..

Ta page index.php  (qui est celle que tu affiches à l'écran )

Un autre script php qui ira chercher les infos que tu veux afficher dans ta page 

Un script ajax que tu mettras dans ta page index qui ira chercher ces infos dans ce second script...

Ensuite, pour debugger ..

- Ajouter dans ton code un console.log de la variable xhr.response (avant ton alert(doc)) et regarder ce que ça affiche dans la console js du navigateur

- Regarder ce qu'il y a dans l'onglet RESPONSE de ton appel ajax

.

Si ça ne fonctionne toujours pas, nous montrer le contenu du fichier php appelé par ton ajax ( qui n'est donc pas le code de la page qui s'affiche actuellement à l'écran hein..)

PS: Par contre j'insiste...  FIREFOX est largement plus pratique lorsqu'il faut débuguer du Javascript et de l'ajax..

0
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023
24 mai 2023 à 22:58

Merci pour ta réponse,

Oui je comprends en ce qui concerne un fichier PHP détaché qui est appelé par AJAX

En ce qui concerne xhr.response, que ce soit dans la console avec "console.log(xhr.response);" ou par l'onglet "response" dans le debugger, on retrouve tout le code présent dans le fichier "index.php"

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 mai 2023 à 23:54

Non mais il faut regarder la réponse quand tu seras bien passé par un autre fichier que le fichier index.......

Si tu prends pas les consignes dans l'ordre ça ne sert à rien...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023
25 mai 2023 à 13:09

Désolé j'avais pas trop bien compris,

Du coup j'ai fais un test en appelant un autre fichier PHP que index.php qui s'appelle testajax.php

Voici le code JS :

let xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
    if(xhr.readyState == 4 && xhr.status == 200){
        let doc = xhr.responseXML;
        console.log(xhr.response);
        alert(doc);
    }
}

let valeur1 = 10;
let valeur2 = "Jimmy";

let urlTarget = 'PHP/testajax.php?valeur1=' + encodeURIComponent(valeur1) + '&valeur2=' + encodeURIComponent(valeur2);

xhr.open('GET', urlTarget, true);
xhr.send(null);

Et voici le code PHP de testajax.php

<?php 
	if(isset($_GET['valeur1']) && isset($_GET['valeur2'])){
		echo '<p>' . $_GET['valeur1'] . '</p>';
		echo '<p>' . $_GET['valeur2'] . '</p>';
	}
?>

Que ce soit dans console.log(xhr.response); ou dans l'onglet response du debugger, on retrouve ceci :

<p>10</p><p>Jimmy</p>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
25 mai 2023 à 13:43

Donc c'est bon ça marche

1
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023
25 mai 2023 à 14:17

Mais comment je fais pour exploiter la réponse du serveur avec xhr, par exemple en voulant sélectionner le premier p ? Je dois utiliser getElementsByTagName('p')[0]; mais sur quoi ? C'est ca que je comprends pas...

0
ZenZeno Messages postés 6 Date d'inscription mercredi 24 mai 2023 Statut Membre Dernière intervention 25 mai 2023
Modifié le 25 mai 2023 à 15:38

Ah non c'est bon j'ai compris ^^ je te remercie =)

0