AJAX [object Element] dans innerHTML

Le
DamBec
Bonjour à tous,
Je fais une petite appli en Ajax/PHP pour soumettre via un formulaire une
requête SQL et en afficher le résultat dans la page courante.

Dans le fichier de réponse XML j'ai donc inclus un tableau HTML que je
souhaite afficher dans ma page avec innerHTML

Le problème qui me rend fou c'est que dans le DIV de résultat s'affiche
uniquement le texte suivant :
[object Element] et non pas le tableau HTML.

Voici un extrait du code qui recherche dans la réponse XMl les tableaux pour
tenter de l'inclure dans la page courante.

reg['out_tab']=window.document.getElementById('tab');
var table = RepXml.getElementsByTagName('table');
reg['out_tab'].innerHTML= table[0];



Je ne comprend vraiment pas ou ça merdouille ! !
Merci pour votre sympathie
DamBEC
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
YD
Le #779097
reg['out_tab']=window.document.getElementById('tab');
var table = RepXml.getElementsByTagName('table');
reg['out_tab'].innerHTML= table[0];

Je ne comprend vraiment pas ou ça merdouille ! !


A gauche : reg['out_tab'].innerHTML qui attend donc
une chaîne (à interpréter comme du HTML après)

A droite : table[0] un objet DOM (qui quand on demande
sa valeur en chaîne renvoie [object Element] ou un
équivalent selon le navigateur utilisé, comme tous les
objets DOM)

Solutions : Soit tu utilises appendChild pour ajouter
la table au DOM, soit tu utilises innerHTML des deux
côtés. Ma préférence va à la 1e des 2 propositions...

--
Y.D.

dambec
Le #779095
reg['out_tab']=window.document.getElementById('tab');
var table = RepXml.getElementsByTagName('table');
reg['out_tab'].innerHTML= table[0];

Je ne comprend vraiment pas ou ça merdouille ! !


A gauche : reg['out_tab'].innerHTML qui attend donc
une chaîne (à interpréter comme du HTML après)

A droite : table[0] un objet DOM (qui quand on demande
sa valeur en chaîne renvoie [object Element] ou un
équivalent selon le navigateur utilisé, comme tous les
objets DOM)

Solutions : Soit tu utilises appendChild pour ajouter
la table au DOM, soit tu utilises innerHTML des deux
côtés. Ma préférence va à la 1e des 2 propositions...

Salut Merci,


J'ai tester avec les deux soluces :
1) avec append child
reg['out_tab'].appendChild(table[0]);

C bizare le DOM est bien envoyer vers le DIV mais le tableau
s'affiche comme un simple texte sans cellule



2) avec innerHTML ou inner text
reg['out_tab'].innerHTML=table[0].innerHTML;



içi cela indique [undefinned]

C vrai que ta premiere prop semble ultra génial mais pourquoi ce type
d'affichage ??


D'avance merci

DAMBEC


SAM
Le #779093
reg['out_tab']=window.document.getElementById('tab');
var table = RepXml.getElementsByTagName('table');
reg['out_tab'].innerHTML= table[0];

Je ne comprend vraiment pas ou ça merdouille ! !


A gauche : reg['out_tab'].innerHTML qui attend donc
une chaîne (à interpréter comme du HTML après)

A droite : table[0] un objet DOM (qui quand on demande
sa valeur en chaîne renvoie [object Element] ou un
équivalent selon le navigateur utilisé, comme tous les
objets DOM)

Solutions : Soit tu utilises appendChild pour ajouter
la table au DOM, soit tu utilises innerHTML des deux
côtés. Ma préférence va à la 1e des 2 propositions...

Salut Merci,


J'ai tester avec les deux soluces :
1) avec append child
reg['out_tab'].appendChild(table[0]);

C bizare le DOM est bien envoyer vers le DIV mais le tableau
s'affiche comme un simple texte sans cellule



2) avec innerHTML ou inner text
reg['out_tab'].innerHTML=table[0].innerHTML;



içi cela indique [undefinned]

C vrai que ta premiere prop semble ultra génial mais pourquoi ce type
d'affichage ??


Je comprends pas ...

déjà : reg['out_tab'] qu'est-ce que ça peut bien être ?

D'autre part si tu veux extraire une partie HTML (ou DOM) d'une réponse
ajax, perso je ferais d'abord afficher ce résultat (dans un div caché?)
puis en extrairait le table pour aller l'appendChilder là où je le veux.

Chercher à décortiquer à la volée une chaine de caractères en se fiant
au DOM n'a aucun sens (à mon idée,hein ?).


Donc essayer qque chose comme ('temp' est un div caché):

var D = document.getElementById('temp');
D.innerHTML = xhlr.responseText;
var T = D.getElementsByTagName('TABLE')[0];
document.getElementById('tab').appendChild(T);
D = null;


Maintenant si 'tab' est déjà un table, ce n'est pas le même cinoche

var D = document.createElement('DIV');
D.innerHTML = xhlr.responseText;
var T = D.getElementsByTagName('TR');
var cible = document.getElementById('tab');
cible = cible.getElementsByTagName('TBODY')[0];;
for(var i=0; i<T.length; i++)
cible.innerHTML += (T[i]).innerHTML;
D = null;

ou :

var D = document.createElement('DIV');
D.innerHTML = xhlr.responseText;
var T = D.getElementsByTagName('TABLE')[0];
var cible = document.getElementById('tab')
cible.parentNode.replaceChild(T, cible);
D = null;

--
sm



Publicité
Poster une réponse
Anonyme