Objxhr.responseXML me retourne "null"

Résolu
chabinot Messages postés 322 Date d'inscription   Statut Membre Dernière intervention   -  
chabinot Messages postés 322 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis en train de dévelloper une galerie de photos avec une sélection, je génère un fichier XML à partir de la base de données. la variable objxhr.responseXML me retourne "null"(voir alert(arg))( en rouge ), voici les sources javascript et php :
Javascript : galerie.js
// ---------------------------------
// Galerie === place_diapo()
// ---------------------------------
function charge_galerie(arg) {
objxhr = xhr_connect()
if (objxhr) {
objxhr.onreadystatechange = function() {
if (objxhr.readyState == 4) {
if (objxhr.status == 200) {
//alert(objxhr.responseText)
reset_galerie()
retour = objxhr.responseXML
place_galerie(retour)
}
}
}
sql = "ch_img_rubId=" + arg;
objxhr.open("POST", "charge_galerie.php", true)
objxhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
objxhr.send(sql)

} else {
alert("Soucis d'xmlHttpRequest")
}
}
function reset_galerie() {
pc = document.getElementById('planche-contact')
while (pc.firstChild) {
pc.removeChild(pc.firstChild)
}
}
function place_galerie(arg) {
diapos = arg.getElementsByTagName('image')
nb_diapo = diapos.length
for (i=0; i<nb_diapo;i++) {
dia_temp = diapos[i]
img = dia_temp.getElementsByTagName('ch_img_fichier')[0].firstChild.nodeValue
infos = dia_temp.getElementsByTagName('ch_img_id')[0].firstChild.nodeValue
folder = dia_temp.getElementsByTagName('ch_img_rubId')[0].firstChild.nodeValue
orientation = dia_temp.getAttribute('orientation')
place_diapo(img, infos, folder, orientation)
}
}
// ---------------------------------
// Diapositives
// ---------------------------------
function place_diapo(arg, src, folder, orientation) {
pc =document.getElementById('planche-contact')
div = document.createElement('div')
img = document.createElement('img')
img.alt = folder
img.className = orientation
img.src = "images/"+folder+"/thumbs/"+arg
div.appendChild(img)
div.src = src
div.onclick = function() {
//alert(this.src)
searchInfos(this.src)
}
pc.appendChild(div)
}
// ---------------------------------
// OBJET XML HTTP Request
// ---------------------------------
function xhr_connect() {
xhr = false
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest
} else if (window.ActiveXObject) {
reussi = false
iexhr = new Array("Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0",
"Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP")
for (i=0; i<iexhr.length && ! reussi; i++) {
try {
xhr = new ActiveXObject(iexhr[i])
} catch(e) {}
}
}
return xhr;
}

PHP : charge_galerie.php
Code php :
<?php
include_once 'Scripts/connect.php';
header('Content-Type: text/xml');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

// Paramètre
$ch_img_rubId = $_POST['ch_img_rubId'];

// Sélection et exécution;
$sql = "SELECT * FROM images WHERE ch_img_rubId = '$ch_img_rubId'";
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$cat = $DB->query($sql);

if ($cat->RowCount() != 0) :
$xml .= '<images>';
while ($d=$cat->fetch(PDO::FETCH_OBJ)) :
$xml .= '<image orientation='.$d->ch_img_orientation.'">';
$xml .= '<ch_img_fichier>'.$d->ch_img_fichier.'</ch_img_fichier>';
$xml .= '<ch_img_id>'.$d->ch_img_id.'</ch_img_id>';
$xml .= '<ch_img_rubId>'.$d->ch_img_rubId.'</ch_img_rubId>';
$xml .= '</image>';


endwhile;
$xml .= '</images>';
else :
$xml .= "<erreur>Il semble qu'il n'y a pas d'image pour la catégorie " .$ch_img_rubId.".</erreur>";
endif;
echo $xml;
?>
Tant qu'à faire, je mets également le script de connexion à la BDD : connect.php
<?php
try {
$DB = new PDO('mysql:host=localhost;dbname=galerie', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'Échec lors de la connexion à la base de données';
}
?>

Je suis sous windows 10, wampserver 3.0, PHP 7.0

alert(objxhr.reponseText) me donne bien mon script XML mais alert(objxhr.responseXML) me retourne "null"
J'ai beau cherhé ou se trouve l'erreur, mais en vain...
J'ajoute mon index.php
<?php
include_once('../Scripts/connect.php');
$sql = "SELECT * FROM rubrique ORDER BY ch_rub_label ASC";
$rubs = $DB->query($sql);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//FR"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="galerie.js"></script>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Document sans nom</title>
<link rel="stylesheet" href="../css/reset.css" />
<link rel="stylesheet" href="../css/layout.css" />
<link rel="stylesheet" href="../css/display.css" />
<link rel="stylesheet" href="../css/infos.css" />
</head>
<body>
<div class="content">
<div id="header">
<div id="logo">
<img src="../images/logo.png" width="160" height="30" alt="logo" />
</div>
<h1>Galerie d'images</h1>
</div>
<div id="sidebar">
<h2>--- Catégorie</h2>
<select name="categorie" id="categorie" onchange="charge_galerie(this.options[this.selectedIndex].value)">
<option value="none">Sélectionnez une catégorie...</option>
<?php
while ($rub = $rubs->fetch(PDO::FETCH_OBJ)) :
echo '<option value="'.$rub->ch_rub_folder.'">'.$rub->ch_rub_label.'</option>';
endwhile;
?>
</select>
<div id="informations">
<h2>--- Informations</h2>
<div id="texte">
<img id="infos_thumb" src="../images/fruits/thumbs/citron.jpg" width="90" height="68" alt="thumb">
<p id="ch_img_id">1</p>
<p id="ch_img_fichier">Citron.jpg</p>
<p id="ch_img_orientation">Paysage</p>
<p id="ch_img_larg">450</p>
<p id="ch_img_haut">299</p>
<hr />
<p id="ch_img_titre">Lorem ipsum dolor sit</p>
<p id="ch_img_sousTitre">Lorem ipsum dolor</p>
<hr />
<p id="ch_img_description">Citron vert (lime)</p>
<p id="ch_img_texte">Lorem ipsum dolor sit amet, consectetur....</p>
<hr />
<p id="ch_img_keywords">Amaury,le Cour, Amaury le Cour,Ajax</p>
</div>
</div>
</div>
<div id="maincontent">
<h2>--- Planche contact</h2>
<div id="planche-contact"></div>
</div>
<div id="footer">
<div class="vcard">
<p class="sujet">Ajax par la pratique</p>
<p class="org">Video2Brain</p>
<p class="street-address">4 rue d' Hendaye</p>
<p class="locality">Nantes</p>
<p class="postal-code">97200</p>
<p class="country-name">France</p>
</div>
</div>
</div>
</body>
</html>

Enfin le script de connexion
<?php
try {
$DB = new PDO('mysql:host=localhost;dbname=galerie', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'Échec lors de la connexion à la base de données';
}
?>

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Tu peux faire un console.log de objxhr et nous affihcer le résultat ?

PS: A l'avenir, merci de préciser dans les balises de code le LANGAGE .... histoire que ça applique la coloration syntaxique.
Merci.


Par exemple :
<code php>
echo "ceci est du code en couleur...";
</code>

ce qui donne :
echo "ceci est du code en couleur...";


au lieu de juste :


echo "ceci est du code en couleur...";


C'est mieux non ?
0
chabinot Messages postés 322 Date d'inscription   Statut Membre Dernière intervention   16
 
Problème résolu, il manquait juste un guillemet (") à la ligne
$xml .= '<image orientation="'.$d->ch_img_orientation.'">';
Il fallait le rajouter
0