Ajax - getelementsbytagname is not a function?

Signaler
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008
-
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008
-
Bonjour, je travaille depuis un certain temps sur une application web faite avec ajax et PHP. Je viens de rencontrer un problème qui m'empêche d'avancer.

Le problème ses que mon application fait avec ajax peu seulement afficher le contenue dans un endroit, mais ses que la je veu qu'il affiche le contenue dans d'autres endroits. Avec se problème jai eu l'idée géniale d'organiser l'information envoyer par le serveur en le mettent dans un élément. Exemple :

<nssajax atrwhere="default">
Default

</nssajax>

<nssajax atrwhere="part1">
Part1

</nssajax>

L'attribut atrwhere sa ses la valeur du id du div qui vas recevoir le contenue.

Voici le code qui logiquement devrait marcher, mais pour une raison inexplicable ça ne marche pas...

getXhr();
                // on défini ce quon va faire quand on aura la réponse
                xhr.onreadystatechange = function(){
                    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
                    whereto();                    if(xhr.readyState 4 && xhr.status 200){
                        //document.getElementById(where).innerHTML = xhr.responseText;
                        var ajaxcontent = xhr.responseText;
             
 for (i=0;i alert(ajaxcontent); sa m'affiche le contenue sans problème, mais le javascript bloque a getElementsByTagName("nssajax") il dit que se n'est pas une fonction. Voilà mon problème.

C'est vrai que jai inventer <nssajax atrwhere="part1">, mais sa je ne veu pas que ça affiche.

Liens à l'application:
www.jeannicolas.com/core/ajax_teste_get_atr_content_in_element.php

Merci pour votre aide.

(Et je dois m'excuser pour mon ortographe)

14 réponses

Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Utilise plutôt ajaxcontent=xhr.responseXML

Cordialement
Roro webDev
Messages postés
224
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
6 juin 2007
2
Evidemment que cela ne marche pas... car ajaxcontent est une chaine de caractère pas un élement DOM!!! donc comme l'a dit roro06 il faut utiliser responseXML etant donné que tu renvoies de l'xml par ajax.

@+

-- The Rubik's Man --
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Rebonjour, jai oublier de vous dire que javais déjà essayer avec xhr.responseXML et que sa ne marchait pas.

Merci pour votre aide.
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Oui, ta réponse est actuellement envoyée en text/HTML.Il faut changer ton content-type en text/XML

Cordialement
Roro webDev
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Ok, merci, mais comment...?

Merci pour ton aide.
Messages postés
224
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
6 juin 2007
2
Bon alors essaye ca:

au lieu de :  var ajaxcontent = xhr.responseText;
fait : var ajaxcontent = document.createElement('div');
       ajaxcontent.innerHTML = xhr.responseText;

puis après la suite de ton code...

-- The Rubik's Man --
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Non non, je parlais de la réponse du serveur
Je ne connais pas trop le php, mais quelquechose comme :
header("Content-type : text/XML") 

(à se faire confirmer)

Cordialement
Roro webDev
Messages postés
224
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
6 juin 2007
2
Oui pourquoi pas mais ma solution de creer un element temporaire fonctionne parfaitement..

A toi de choisir maintenant

-- The Rubik's Man --
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Re, Rebonjour, merci encore une autre fois pour votre aide ses tres apprécier. [auteurdetail.aspx?ID=649381 rubiks10] j'aime beaucoup ton idée mais jai pas l'impression que sa marche avec mon système.

Jai essayer de mettre un content-type avec php et sa ne done rien. Firefox me renvoie le même message d'érreure ajaxcontent.getElementsByTagName is not a function.

Merci encore.
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour




Pour debugger sous firefox, je te conseille vivement firebug (extension de ff). Sur ton site, il apparait que le content-type de ta réponse est tjrs en text/html. fait peut-être une recherche sur phpcs.com. Par contre, je suis étonné que la solution de Rubik's, qui me semble valable, ne fonctionne pas.

au lieu de


tagget = ajaxcontent.getElementsByTagName("nssajax").item(i)

essaye :
tagget = ajaxcontent.getElementsByTagName("nssajax")[i]





Cordialement
Roro webDev
Messages postés
224
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
6 juin 2007
2
Salut

Tu dis que tu aimes bien mon idée mais que tu n'as pas l'impression que ca marche avec ton système...
Mais as-tu essayé??? car ca fonctionne très bien chez moi.

-- The Rubik's Man --
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Oui, jai mis le header dans php comme tu ma dit. Disons que le problème a évoluer car la il a arrêter de me dire que getElementByTagName is not a function.

La le probème ses que je ne suis pas capable de retirer l'information qui se trouve dans l'element, jai essayer avec tagget.firstChild.nodeValue; et sa marche disons a moitier sa me done une partie de mon contenue. Exemple:

Voici se que le serveur luis envoie:

<nssajax atrwhere="default">
aaa
Part1

</nssajax>

Avec tagget.firstChild.nodeValue; il me done:

aaa

Et n'affiche pas Part1
.

Jai essayer apprais tagget.innerHTML;

Sa me renvoie Undifiend.

Apprais jai essayer avec tagget.innerXML.

Sa me renvoie Undifiend.

Merci encore une fois. Et je vais actualiser la version sur mon serveur.
Messages postés
224
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
6 juin 2007
2
Oui c'est tout a fait normal que ca t'affiches que " aaa " car tout ce qu'il y a entre les balises "<h2>" sont dans une autre childNodes

tagget.childNodes[0].nodeVallue   =>  "aaa"
tagget.childNodes[1].firstChild.nodeValue   =>   "Part1"

Je pense que devrais apprendre le modèle DOM c'est à dire lire des cours et aussi sur le XML car si tu n'as pas les connaissances nécessaires tu t'en sortiras pas.

En résumé tout ce qui entre des entre balise est une élement !!!!

-- The Rubik's Man --
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

La le problème ses que jai réussis a retirer les donner de <h2> mais sa ne veu pas garder le <h2>.