DOM! [Résolu]

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
-
Questions comment je retire le contenue d'un dans un element. Jai essayer avec tout les facons que jai vue sur Internet et il en pas une qui marche. J'ai essayer avec innerHTML sa marche pas jaiaussi essayer avec var valueoftherightitem = so_getText(tagget,para); et sa maffiche que aaa Part1 quand ses supposer me donner aaa Part1
;

Voici le code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/JavaScript">
/**
* XML HTTP REQUEST
*/          var callcontent = "false";
            var left = "";
            var headfoot = "";
            var foot = "";
            var biglink = "";
            var classea = "";
            var classe = "";
            var valueofselopt = "";
            var myArray=new Array();
            var toArray=new Array();
            var rwhere=new Array();
            var xhr = null;
     
function getXhr()
{
if(window.XMLHttpRequest) // Firefox et autres
{
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
}
   
function so_getText(obj,where) {
    if(obj.textContent) return obj.textContent;
    if (obj.nodeType == 3) return obj.data;
    var txt = new Array(), i=0;
    var append = where.appendChild(obj.childNodes);
    while(append[i]) {
        txt[txt.length] = append[i];
        i++;
    }
    return txt.join("");
}

function so_clearInnerHTML(obj) {
    // perform a shallow clone on obj
    nObj = obj.cloneNode(false);
    // insert the cloned object into the DOM before the original one
    obj.parentNode.insertBefore(nObj,obj);
    // remove the original object
    obj.parentNode.removeChild(obj);
}
           
function requestcont(callcontent,where,valueofselopt)
{

if (callcontent.length == 0)
{
callcontent = valueofselopt;
}
else
{
callcontent = callcontent;
}

whereto(where);
function whereto(where)
{
where = where;
return where;
}
                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('tmpm').innerHTML = xhr.responseText;
 
                for (i=0;i<xhr.responseXML.getElementsByTagName("nssajax").length; i++) {
   
            var tagget = xhr.responseXML.getElementsByTagName("nssajax")[i];
            var idAttr = tagget.getAttributeNode("atrwhere");
            var getattr = tagget.getAttribute("atrwhere");
            alert(tagget.cloneNode(true));
            var vaofattr = idAttr.value;
       
            var para = document.getElementById(vaofattr);
            var valueoftherightitem = so_getText(tagget,para);
            alert(valueoftherightitem);
            document.getElementById(vaofattr).innerHTML = valueoftherightitem;
            //para.appendChild(tagget);
    }
                    }
                };

                adressbase="teste_gig.php?content=";
                call=callcontent;
                mix=adressbase+call;
                xhr.open("GET", mix,true);
                xhr.send(null);
}
   
function block(wi,action)
{
var elementNodeReference = document.getElementById(wi);
if (action == "open")
{
elementNodeReference.className = "blockshow";
}

if (action == "close")
{
elementNodeReference.className = "blocknone";
}

}

function moreless(where) {
var elementNodeReference = document.getElementById(where);
if (elementNodeReference.style.display != "none")
{
elementNodeReference.style.display = "none";
}
else
{
elementNodeReference.style.display = "block";
}
}

function startTime()
{
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
// add a zero in front of numbers<10
m=checkTime(m);
s=checkTime(s);
document.getElementById('txt').innerHTML= h+":"+m+":"+s;
t=setTimeout('startTime()',500);
}

function checkTime(i)
{
if (i<10)
  {i="0" + i;}
  return i;
}
</script>
</head>

[# Load It]

</html>

15 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
B

onjour...
les choses ce précisent...




rappel :




Voici le fichier Xml générer par php:




<?xml version= "1.0" encoding="ISO-8859-1"?>
<content>
   <nssajax atrwhere="default">
    aaa
    Part1

  </nssajax>
  <nssajax atrwhere="part1">
    Part1

  </nssajax>
</content>






première chose à faire, changer entre les balises nssajax les < et les > en &lt; et &gt; pour qu'elles ne soient pas prise en compte directement...
exemple de ligne




...
  <nssajax atrwhere ="default">

    aaa

    &lt;h2&gt;Part1&lt;/h2&gt;

  </nssajax>
...




ensuite la lecture et l'écriture deviennent la suivante...
//-- Les données sont prêtes

if( xhr.readyState = = 4){
  //-- Si réponse OK
  if( xhr.status == 200){
    //-- Récup contenu fichier
    Obj  = xhr.responseXML;


    //-- Récup contenu fichier





    var szTag = new Array(" nssajax "); // tableau de balises à récupérer
    var ODiv  = null;
    var szDiv = "";
    //-- on parcours les balises  
    for( var i =0; i < szTag.length; i++){
      OTag = Obj.getElementsByTagName( szTag[i]);
      if( OTag){
        for( var k=0; k <OTag.length; k++){
          szDiv = OTag[k].getAttribute(" atrwhere ");
          ODiv  =
document.getElementById( szDiv);
          if( ODiv)


            ODiv.innerHTML = OTag[k].textContent;
        }
      }
    }
  }
}



une seule lecture suffit, cela devrait te convenir...
bon voila bonne PROG...
;0)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
B
onjour...
Je résume ta fonction...

function sprequest(callcontent){
  $("load").className = "load";
  getXhr();
  var requestarray = new Array();
  xhr.onreadystatechange = function(){
    //-- Si Requete complete
    if( xhr.readyState==4){
      //-- Si réponse OK
      if( xhr.status == 200){
        //-- Récup contenu fichier
        //-- on parcours les balises
      }
    }
    else if (xhr.status == 404){
      alert("Error: 404!");
    }
};

Il faut tester le status si la requete est compléte soit

function sprequest(callcontent){
  xhr.onreadystatechange = function(){
    //-- Si Requete complete
    if( xhr.readyState==4){
      //-- Si réponse OK
      if( xhr.status==200){
        //-- Récup contenu fichier
      }
      //-- Si Not Found
      else if (xhr.status == 404){
        alert("Error: 404!");
      }
    }
};

imbrication de
  else if (xhr.status == 404){
dans 
  if( xhr.readyState==4){

Je débute aussi en XML alors indulgence, j'avance tout doucement...Alors

;0)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
 
Bonjour...

//-------------------------
function Affiche_Response(){
  var Html  ="";
  var Noeud = null;
  var Tag   = null;
  var Obj   = null;


  //-- Les données sont prêtes
  if( XML_Http.readyState==4){
    //-- Affichage fichier Brut

    document.getElementById('INFO').innerHTML += ""+ XML_Http.responseText +"

";


    //-- Si réponse OK
    if( XML_Http.status==200){



      //-- Récup contenu fichier

      Obj  = XML_Http.responseXML;
      Html = "\"
      //-- Récup des Tag
      Noeud = Obj.getElementsByTagName(\"RACINE\");
      //-- Parcours l'objet
      for( i=0; i <Noeud.length; i++){
        Html += \"----
\";
        //-- Récup des Balises
        Tag = Noeud[i].getElementsByTagName(\"BALISE_1\");
        try{
          Html += \"" + Tag[0].firstChild.data + ", \";
        }
        catch(e){
          Html += \"&nbsp;, \";
        }
        //-- Récup des Balises
        Tag= Noeud[i].getElementsByTagName(\"BALISE_2\");
        try{
          Html += \"" + Tag[0].firstChild.data + ", \";
        }
        catch(e){
          Html += \"&nbsp;, \";
        }
        Html += \"\";
      }
      Html += "
";
      //-- Write in document
      document.getElementById('REPONSE').innerHTML =Html;
    }
    else
      alert("Problem Lecture des Données\nSTATUS = " +XML_Http.status);
  }
}



avec la définition de XML_Http.onreadystatechange = Affiche_Response;

Si ton fichier est bien structuré cela devrait baigner

;0)
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Voici le fichier Xml générer par php:

<?xml version="1.0" encoding="ISO-8859-1"?>
<content>
<nssajax atrwhere="default">
aaa
Part1

</nssajax>

<nssajax atrwhere="part1">
Part1

</nssajax>
</content>

Voici ce qu'il affiche:

[# Load It]

aaa
Part1

Part1

Voici ce qu'il est supposer d'affciher:




[# Load It]





aaa
Part1









Part1





Si vous avez une idée de comment faire...

Et merci pour ton aide.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
B

onjour...

Suivant le schéma ci dessous...

Noeud   <content>
Noeud[0]+-   <nssajax atrwhere="default">
        |    aaa
        |    Part1

        +-  </nssajax>
Noeud[1]+-  <nssajax atrwhere="part1">
        |    Part1

        +-  </nssajax>
        </content>






  //-- Récup des Tag
  Noeud = Obj.getElementsByTagName("content");
  //-- Parcours l'objet
  for( i=0; i <Noeud.length; i++){
    //-- Récup
    Tag = Noeud[i].getElementsByTagName("nssajax");
    szAttrib = Tag.getAttribute("atrwhere");
    szTexte  = Tag.innerHTML;


    //-- Ici tu formattes la sortie comme tu veux
    Html += "
"+ szTexte +"
";
  }


  //-- Write in document
  document.getElementById('REPONSE').innerHTML =Html;



cela devrait te donner dans DIV ID="REPONSE"

aaa
Part1

aaa
Part1

Je ne pense pas a te lire que c'est ce que tu cherches, la sortie que tu attends ne me semblant pas correspondre à la structure XML...

;0)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
OUILLE

Je me suis un peu mélangé...

<?xml version= "1.0" encoding="ISO-8859-1"?>
<content>
  <nssajax atrwhere="default">
    <titre> aaa</titre>
    Part1

  </nssajax>
  <nssajax atrwhere ="part1">
    <titre></titre>
    Part1

  </nssajax>
</content>




  //-- Récup contenu fichier
  Obj  = XML_Http.responseXML;

  //-- Récup des Tag

  Noeud = Obj.getElementsByTagName("nssajax");
  //-- Parcours l'objet
  Html ="";
  for( i=0; i <Noeud.length; i++){
    //-- Récup
    szAttrib = Noeud[i].getAttribute("atrwhere");



    Tag = Noeud[i].getElementsByTagName("titre");
    szTitre = Tag[0].firstChild.data



    Tag= Noeud[i].getElementsByTagName("h2");
    szPart = Tag[0].firstChild.data




    //-- Ici tu la sortie formattes comme tu veux

    Html += "
"
    Html +=  szTitre +"
    Html += ""+ szPart +"

";
  }



il est préférable que le texte aaa
soit entre balise...

;0)
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Jai penser de le faire d'une autre facon:
 Voici se que le serveur envoie avec la première requeste;

<cmd>
 <nssajax>
  <request>part1</request>
  <request>part2</request>
 </nssajax>
</cmd>

Javascript mais le contenue des <resquest> dans un array. Jusque la tout marche.

Apprais il fais se si:

                             for (x in requestarray)
{
requestcont(requestarray[x],requestarray[x]);
}

voici ce qu'il m'affiche:

<div id="default"></div>
<div id="part1">
</div>

<div id="part2"><h2>Part2</h2>

Voici ce qu'il est supposer afficher

<div id="default"></div>

<div id="part1">
Hello
</div>

<div id="part2"><h2>Part2</h2>


On dirait qu'il prend la dernière valeur du array.

Voici l'adresse:

http://www.jeannicolas.com/core/ajax_teste_get_atr_content_in_element.php

Merci, pour ton aide.
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Le problème ses que mes div son déja prédéfini je ne peu pas en créé d'autre.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
 
Bonjour...

J'ai un peu de mal à tout comprendre...

notament dans ta fonction
function sprequest(callcontent){...}
tu fais appel à la function


requestcont

qui requière 3 arguments mais tu n'en passes que 2 ???
et qui enchaîne sur une autre requête...donc tu fais autant de requête qu'il y a d'éléments dans le tableau requestarray[]...!!!





dans la fonction reprise ci dessous, à quoi sert whereto dont tu n'exploites pas la valeur retournée, et qui est appellée 2 fois ?





//---------------------------------------------------



function requestcont(callcontent,where,valueofselopt){
  if (callcontent.length = = 0){
    callcontent = valueofselopt;
  }
  else{
    callcontent = callcontent;
  }
  whereto (where);
function whereto(where){
  return where;
}
  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;
      }
    };
    adressbase="teste_gig.php?content=";
    call=callcontent;
    alert(call);
    mix=adressbase+call;
    xhr.open("GET", mix,true);
    xhr.send(null);
}

Je te propose néanmoins un test c'est de mettre += dans cette fonction...



      if(xhr.readyState 4 && xhr.status 200){




        document.getElementById(where).innerHTML += xhr.responseText;
      }
...et de voir ce qui est renvoyé en final...




;0)
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Bon, voici en détaille ce que jessais de faire.
Commencon avec le pourquoi:

J'ai commencer a faire une application web avec ajax, audébut tout fonctionnais jusquatent que je déside de me compliquer la vie...
Je me suis retrouver avec ce problème j'avais 9 endroits différent a loader du contenue et non un. C'est la que jai chercher sur google et jai rien trouver j'ai alors décider de loader une fois tout le contenue des 10 element que je voulais affecter dans 10 element "inventer" ou javascript prendrais le attrwhere= "" pour savoir dans quelle element le contenue devais aller et prendre le contenue de ses élément.

Exemple:

_Envoie de la requeste_
_le serveur traville..._
_le serveur envoie le contenue..._

<nssajax attrwhere="part1">
allohum
<hr /> n'importequoi...
</nssajax>
<nssajax attrwhere="part2">
bgd aaa <hr /> n'importequoi...

</nssajax>

etc...

_la javascript prend le contenue du premier element...

<nssajax attrwhere ="part1">

allohum
<hr /> n'importequoi...

</nssajax>

_et le découpe et l'insert dans le div prédéfini...

allohum
<hr /> n'importequoi...

apprais il prend l'autres et l'autre jusquatent qu'il les face tout...

Bon sa cétais ma première idée mais bon sa n'as pas marcher car je n'était pas capable de trouver une facon de prendre le contenue dans <nssajax>
</nssajax>, au début jai penser a innerHTML mais sa pas marcher.

C'est la que je suis arriver avec le plan B:

_tu envoie la requeste au serveur...

_le serveur te renvoie une liste de requeste...

<resquest>part1</request>
<resquest>part2</request>
<resquest>part3</request>

etc...

_javascript prend se qui se trouve dans les elements request et le met dans un array...

_apprais il renvoie des requeste baser sur le array...

Exemple il commence avec le premier
apprais le deuxième
apprais le troisième
etc...

Le problème ses que les endroit ou le contenue doit se loader son déja prédéfini, c'est pour sa que je ne peu les créé et ses pour sa que + = ne marche pas je ne rajoute pas le même contenue dans le même div mais dans plusieur qui son déja défini.

Le bus ses que sa sois le plus flexible...

Merci pour ton aide...
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Dit le moi si tu n'est pas sur car je sais que je fais beaucoup de fautes de français et fait moi confience quand je te dit que sa fait 5 personne qui on essayer de m'aider et il en a pas un qui a réussis a trouver une solution a mon problème.

Merci beaucoup.
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Cool, merci je vais essayer sa merci BEAUCOUP!
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Merci BEAUCOUP!!!

Tu EST un génie. Et je suis sérieux tu me sauve la vie.

J'ai pas encore de site officiel pour mon projet, mais quand je laurait je tenverais un liens.

Merci encore.
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Rebonjour, jai essayer se que tu as fait et sa fonctionne a merveille sur Firefox et Opera, mais explorer veu rien savoir.

Voici la fonction, jai rajouter des trucs:


function $(id) { return document.getElementById(id); }

function sprequest(callcontent)
{
$("load").className = "load";
getXhr();
                var requestarray = new Array();
                xhr.onreadystatechange = function(){
                   
                    if( xhr.readyState==4){
  //-- Si réponse OK
  if( xhr.status==200){
    //-- Récup contenu fichier
   if(navigator.appName == "Microsoft Internet Explorer"){var Obj=xhr.responseXML; alert("This option is not evelabole for the moment on Internet Explorer, please use Firefox.");} else {var Obj=xhr.responseXML;}
   if(mozillaFlag){
removeWhitespace(Obj);
}
    //-- Récup contenu fichier
    var szTag = new Array("nssajax"); // tableau de balises à récupérer
    var ODiv  = null;
    var szDiv = "";
    //-- on parcours les balises 
    for( var i=0; i < szTag.length; i++){
      OTag = Obj.getElementsByTagName(szTag[i]);
      if( OTag){
        for( var k=0; k <OTag.length; k++){
          szDiv = OTag[k].getAttribute("atrwhere");
          ODiv  = $(szDiv);
          if( ODiv)
            ODiv.innerHTML = OTag[k].textContent;
            $("load").className = "loadnone";
        }
      }
    }
  }
}
else if (xhr.status == 404)
    {
      alert("Error: 404!");
    }
                };
               
                killcache = "&datetime=" + new Date().getTime();
                adressbase="sw.php?content=";
                call=callcontent;
                mix=adressbase+call+killcache;
                xhr.open("GET", mix,true);
                xhr.send(null);
}

function removeWhitespace(xml)
{
var loopIndex;
for (loopIndex = 0; loopIndex < xml.childNodes.length;
loopIndex++) {
var currentNode = xml.childNodes[loopIndex];
if (currentNode.nodeType == 1) {
removeWhitespace(currentNode);
}
if (((/^\s+$/.test(currentNode.nodeValue))) &&
(currentNode.nodeType == 3)) {
xml.removeChild(xml.childNodes[loopIndex--]);
}
}
}

Merci en avance, et si tu as encore un peu de temps jaimerais savoir pourquoi se si ne marche pas:

else if (xhr.status == 404)

    {

      alert("Error: 404!");

    }

sa menvoie des erreur tout le temps, sur le Error console de Firefox et Explorer.

Encore une fois merci beaucoup pour ton aide.
Messages postés
79
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
10 juillet 2008

Merci encore une fois, sa marche.

Mais sa ne marche toujours pas sur Explorer 6.0, sa me renvoie undefined.

      else if (xhr.status == 404){
        alert("Error: 404!");
      }
Ça sa marche.

Mais la requeste XML ne marche pas sur Explorer.

Si je rajoute xml a Obj=xhr.responseXML comme ce si: Obj=xhr.responseXML.xml et je le met dans un alert(); sa maffiche le XML dans le alert mais il veu pas l'afficher dans la page. Je te dit sa car sa pourais t'aider. En temps normale je ne me casserais pas la tete avec Explorer car jen est plain le *** avec ce navigateur qui a été fait par des ***. Mais je n'est pas le chois car le monde qui von utiliser mon application on en majoriter Explorer et je ne peu pas commencer a aubliger a tout le monde a utiliser Firefox même si sa serais une idée géniale. Mais si sa continue comme sa je n'aurais pas le choix.

Entoucas, Merci encore une fois pour ton aide, "You are a life saver!!!" MERCI!!!