IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] firefox tronque le xml


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut [AJAX] firefox tronque le xml
    Bonjour à tous,
    je rencontre le même problème que phxGolden en 2007:

    http://www.developpez.net/forums/d33...n/#post2066347

    c.à.d. un texte long récupéré en AJAX est tronqué sous FireFox et pas sous Safari, même si le texte ne contient aucun retour chariot ou autre…

    comme il ne semble pas l'avoir résolu, je me permet de relancer la discussion !

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Par contre ça serait bien d'afficher ici ton code, tes erreurs etc...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    alors… en simplifiant :
    • mon document xml comprend une balise <bio> qui contient un texte de plus de 4096 caractères
    • dans le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var liste = requeteHttp.responseXML
     
    document.body.innerHTML += liste.getElementsByTagName('bio')[0].firstChild.nodeValue
    avec ça, le texte apparaît tronqué sous Firefox, pas sous Safari !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    ce n'est pas clair ou ça ne parle à personne ?

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    tu peux donner le code utilisé pour la requête stp ?
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  6. #6
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    J'avais eu le même problème sous IE mais pas sous FF.

    Regarde ma réponse ici, peut être que ca pourrait t'aider.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    bien sûr !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    var requeteHttp
    var liste
     
    window.onload = onloadWin
     
    function onloadWin(){
    	requeteHttp =	new XMLHttpRequest()
    	requeteHttp.open("GET","fichiers/donnees.xml",true)
    	requeteHttp.onreadystatechange = construireMenu
    	requeteHttp.send(null)
    }
     
    function construireMenu(){
    	if(requeteHttp.readyState == 4) {
    		if(requeteHttp.status == 200) {
    			liste = requeteHttp.responseXML
                           document.body.innerHTML += liste.getElementsByTagName('bio')[0].firstChild.nodeValue
    		}
    		else alert('fichier introuvable !')
    	}
    }

  8. #8
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    que te donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert(liste.getElementsByTagName('bio')[0].childNodes.length);
    Je crains que les chaines trop longues soient splitée en blocs et qu'il
    y aie plusieurs textNodes au lieu d'un grand.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    - de retour après une petite interruption des programmes ! -

    merci DoubleU : j'avais repéré ton topic, mais comme il est très spécifique à IE, je me l'étais mis sous le coude en attendant de résoudre le problème FF !…

    merci marcha : effectivement, ton alert donne 1 sous Safari, et 2 sous FF !!
    la solution est-elle de détecter tous les noeuds compris dans <bio> et de les concaténer ?

    comme je débute en AJAX, je ne sais pas trop comment on s'y prend…
    mais j'ai l'impression que ça pourrait résoudre pas mal de mes questions,
    comme : comment récupérer un texte qui contient des balises de saut de ligne,
    voire des balises de liens, ou autre…

    merci d'avance pour votre aide

  10. #10
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par spidflinch Voir le message
    merci marcha : effectivement, ton alert donne 1 sous Safari, et 2 sous FF !!
    la solution est-elle de détecter tous les noeuds compris dans <bio> et de les concaténer ?
    Cela me semble être une solution judicieuse. Si ça se trouve Safari se comportera
    comme FireFox mais peut-être seulement si le texte est plus long.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  11. #11
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Ou tu fais une boucle sur le nombre de fils de ton noeud (tu l'as avec length), comme ça, ça marchera tout le temps.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    merci, je vais essayer ça tout de suite :
    j'ai cru comprendre que ça passe par les méthodes create- et append-,
    mais du coup se posent des questions plus générales !…
    • quelle différence entre createElement() et createTextNode() ?
    ne peut-on - question bête pour comprendre… - créer un noeud texte avec createElement() ?
    • quelle différence entre appendChild() et appendData() ?

    - je sais, je déborde un peu du cadre de mon topic !… -

    merci d'avance.

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    createElement crée un noeud de type balise alors que createTextNode crée un noeud de type texte. Les types de noeuds sont très importants en XML, donc les deux ne sont pas interchangeables et tu ne peux pas créer de texte avec createTextNode.

    appendChild ajoute un noeud enfant à un noeud alors que appendData rajoute du contenu (texte) à un noeud texte. Là encore, ils ne sont pas interchangeables.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    bien… voilà ce que j'ai pondu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			var texte = document.createTextNode("")
    			for (i = 0; i < p$$(donnees,'bio')[0].childNodes.length; i++){
    				texte.appendData(p$$(donnees,'bio')[0].childNodes[i].nodeValue)
    			}
    			document.body.innerHTML = texte.nodeValue
    et ça marche ! j'ai bien le même résultat sous Safari et FF.

    est-ce que ça vous semble correct ?
    je ne suis pas pour l'instant en mesure de le tester sous IE…
    est-ce que ça marchera encore ?!…

  15. #15
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    childNodes[0] ?

    childNodes[i] :-)
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    trop rapide marcha : je l'ai vu en postant mais tu ne m'a même pas laissé le temps de me corriger !! merci

    merci aussi bovino ; je commence à y voir plus clair !…

    prochaine étape donc : concaténer du texte contenant des balises en ligne !… - est-ce une hérésie en xml ?? -
    ça m'a l'air une autre paire de manche : suis-je obligé de détecter le type de chaque noeud pour le recréer à l'identique ?

  17. #17
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Je sais pas :-) moi j'utilise de préférence des fragment html passé dans
    responseText pour les injecter plus simplement avec innerHTML, mais
    j'ai trouvé cet article qui semble intéressant.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Firefox tronque ma réponse XML alors que IE non
    Par phxGolden dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 22/05/2007, 11h20
  2. [AJAX] probleme appelle page XML sur autre serveur
    Par ldcarpathes dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/08/2006, 18h35
  3. [AJAX] Recuperer des donnes xml
    Par bourvil dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/07/2006, 08h39
  4. [AJAX] Enregistrer un flux XML
    Par Bissada dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/06/2006, 17h52
  5. [AJAX] Récupération tronquée de donnée binaire via XMLHttpRequest
    Par Christophe Charron dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/06/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo