AJAX/JS responseXML retourne NULL
Résolu/Fermé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
- Comment ouvrir un fichier null ?
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
- Comment ouvrir un fichier dat - Guide
- Comment réduire la taille d'un fichier - Guide
7 réponses
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 ?
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
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..
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"
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question25 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>
25 mai 2023 à 13:43
Donc c'est bon ça marche
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...
Modifié le 25 mai 2023 à 15:38
Ah non c'est bon j'ai compris ^^ je te remercie =)