Ajax - getelementsbytagname is not a function?

jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008 - 23 nov. 2006 à 04:55
jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008 - 25 nov. 2006 à 02:18
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

cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
23 nov. 2006 à 10:23
Bonjour




Utilise plutôt ajaxcontent=xhr.responseXML

Cordialement
Roro webDev
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
23 nov. 2006 à 13:24
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 --
0
jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008
23 nov. 2006 à 15:25
Rebonjour, jai oublier de vous dire que javais déjà essayer avec xhr.responseXML et que sa ne marchait pas.

Merci pour votre aide.
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
23 nov. 2006 à 15:39
Bonjour




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

Cordialement
Roro webDev
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008
23 nov. 2006 à 15:56
Ok, merci, mais comment...?

Merci pour ton aide.
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
23 nov. 2006 à 16:03
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 --
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
23 nov. 2006 à 16:09
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
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
23 nov. 2006 à 17:20
Oui pourquoi pas mais ma solution de creer un element temporaire fonctionne parfaitement..

A toi de choisir maintenant

-- The Rubik's Man --
0
jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008
24 nov. 2006 à 04:35
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.
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
24 nov. 2006 à 09:15
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
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
24 nov. 2006 à 20:45
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 --
0
jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008
24 nov. 2006 à 21:55
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.
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
25 nov. 2006 à 02:12
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 --
0
jnbdzjnbdz Messages postés 79 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 10 juillet 2008
25 nov. 2006 à 02:18
La le problème ses que jai réussis a retirer les donner de <h2> mais sa ne veu pas garder le <h2>.
0
Rejoignez-nous