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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
YD
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.
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...
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
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
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 ??
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
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
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;
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;