Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

js, php et xhr : insertion xml

16 réponses
Avatar
unbewusst.sein
je construis un fragment html par DOMDocument en php :

le fichier "categories.php" :
<?php
header('Content-type: text/xml; charset=utf-8');

function add_li($doc, $ul, $idx, $name){
$li=$doc->createElement('li');
$li=$ul->appendChild($li);
$li->setAttribute('onclick', "load_items(this,
".$idx.");return false");
$li->nodeValue=$name;
return $li;
}
$doc=new DOMDocument('1.0', 'utf-8');
$doc->preserveWhiteSpace=true;
$ul=$doc->createElement('ul');
$ul=$doc->appendChild($ul);
$ul->setAttribute('class', 'categories');

$li=add_li($doc, $ul, "-1", "Toutes");

$db=new SQLite3('../../../landp.db');
$result=$db->query('SELECT * FROM categories;');
while ($row=$result->fetchArray()) {
$li=add_li($doc, $ul, $row['idx'], $row['name']);
}
echo $doc->saveXML();
?>

si, côté js, je l'inserre comme !a (avec responseXML) :
function load_categories() {
loadXMLDoc("php/categories.php",function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {

document.getElementById("categories").innerHTML=xmlhttp.responseXML;
}
});
}

alors, au niveau de la fenêtre du butineur, j'obtiens :

[object Document]

est-ce que ça signifie que je dois l'inserrer comme un fragment :
document.getElementById('categories').appendChild(xmlhttp.responseXML);
???

bon par contre si dans le fichier "categories.php" je change juste le
header pour :
header('Content-type: text/html; charset=utf-8');

ie. "text/html" au lieu de "text/xml" et que l'insertion se fait par
responseText :
document.getElementById("categories").innerHTML=xmlhttp.responseText;

alors j'ai le "bon" résultat.

autrement dit, est-il possible d'inserrer une reponse xml venant de php
comme un fragment (x)html ou pas ?

--
« Si tous ceux qui n'ont rien n'en demandaient pas plus,
il serait bien facile de contenter tout le monde. »
(Coluche)

6 réponses

1 2
Avatar
Pascal Poncet
Le 31/08/2011 15:08, SAM a écrit :
J'imagine qu'une fois le fragment inséré il est alors tout à fait
possible d'en exploiter sa représentation DOM ?
Bon, peut-être pas avant qu'il ne soit effectivement et réellement inséré ?
(ex: on ne peut tenter d'obtenir les childNodes du responseText)



Exactement, et le véritable intérêt de responseXML est de disposer, non
pas d'une simple chaîne comme avec responseText, mais d'un arbre DOM que
l'on peut manipuler à loisir pour en extraire le contenu à insérer.

Typiquement, le contenu de responseText est utilisé avec innerHTML, qui
implémente un algorithme de linéarisation du fragment d'arbre DOM de
l'élément propriétaire.
Cette propriété est donc bien adaptée à ce type de traitement, beaucoup
plus simple mais avec moins de possibilités comme, effectivement, celle
qui permet de manipuler le contenu avant insertion.

--
Cordialement,
Pascal
Avatar
unbewusst.sein
SAM wrote:


J'imagine qu'une fois le fragment inséré il est alors tout à fait
possible d'en exploiter sa représentation DOM ?
Bon, peut-être pas avant qu'il ne soit effectivement et réellement inséré ?
(ex: on ne peut tenter d'obtenir les childNodes du responseText)



Je n'ai pas eu le temps, de vérifier cela, je le ferai très bientôt.

--
« Il n'y a pas de hasards, il n'y a que des rendez-vous. »
(Paul Eluard)
Avatar
Pascal Poncet
Le 31/08/2011 15:24, Une Bévue a écrit :
Pascal Poncet wrote:
Je rappelle que c'est un langage de template HTML natif.



le php ? là je ne pige pas trop ton assertion "langage de template HTML
natif" ...




Langage de template, parce qu'on peut passer des valeurs de variables et
écrire du code directement dans le source HTML, pour peu que le fichier
soit interprété avant d'être servi.
Natif, parce qu'il n'y a ni installation ni configuration particulière
pour disposer de cette fonctionnalité, et que c'était prévu pour ça et
comme ça dès l'origine.

ce qui est absolument, sûr, je le dis même si je sais bien que je ne
suis pas informatien, c'est un langage mal conçu, très mal documenté, et
j'ai été content de le lire sous la plume de pro du xml, ce que je ne
suis pas.




Limite troll, quand même !
L'immense communauté de développeurs et d'utilisateurs de ce langage
n'est pas une génération spontanée.
L'histoire a certainement commencée avec quelques bricolages, mais c'est
aujourd'hui un choix raisonné, foi de développeur, consultant et formateur.

où est l'efficacité ?




Peut-être pas très forte, dans ton cas d'utilisation.
C'est pourquoi on te conseille de renoncer, et d'employer des méthodes
plus simples.


--
Cordialement,
Pascal
Avatar
SAM
Le 31/08/11 15:40, Une Bévue a écrit :
SAM wrote:

J'imagine qu'une fois le fragment inséré il est alors tout à fait
possible d'en exploiter sa représentation DOM ?
Bon, peut-être pas avant qu'il ne soit effectivement et réellement inséré ?
(ex: on ne peut tenter d'obtenir les childNodes du responseText)



Je n'ai pas eu le temps, de vérifier cela, je le ferai très bientôt.



Tu ne te souviens pas de AdB2Html ?

--
Stéphane Moriaux avec/with iMac-intel
Avatar
unbewusst.sein
SAM wrote:

Tu ne te souviens pas de AdB2Html ?



je ne l'ai plus...
je crois bien avoir utilisé une transfo xslt ?
--
« L'amour est la sagesse du fou et la folie du sage. »
(Samuel Johnson)
Avatar
unbewusst.sein
Pascal Poncet wrote:

Langage de template, parce qu'on peut passer des valeurs de variables et
écrire du code directement dans le source HTML, pour peu que le fichier
soit interprété avant d'être servi.
Natif, parce qu'il n'y a ni installation ni configuration particulière
pour disposer de cette fonctionnalité, et que c'était prévu pour ça et
comme ça dès l'origine.



OK

> ce qui est absolument, sûr, je le dis même si je sais bien que je ne
> suis pas informatien, c'est un langage mal conçu, très mal documenté, et
> j'ai été content de le lire sous la plume de pro du xml, ce que je ne
> suis pas.
>

Limite troll, quand même !
L'immense communauté de développeurs et d'utilisateurs de ce langage
n'est pas une génération spontanée.
L'histoire a certainement commencée avec quelques bricolages, mais c'est
aujourd'hui un choix raisonné, foi de développeur, consultant et formateur.



Un choix raisonné, je suis d'accord.

> où est l'efficacité ?
>

Peut-être pas très forte, dans ton cas d'utilisation.
C'est pourquoi on te conseille de renoncer, et d'employer des méthodes
plus simples.



ouais, c'est ce que je m'apprète à faire...

--
« L'amour est la sagesse du fou et la folie du sage. »
(Samuel Johnson)
1 2