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] R�ponse ajax type responseXML et traitement DOM


Sujet :

JavaScript

  1. #1
    Membre confirm�
    Inscrit en
    D�cembre 2007
    Messages
    78
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2007
    Messages : 78
    Par d�faut [AJAX] R�ponse ajax type responseXML et traitement DOM
    Bonjour,

    j'organise la r�cup�ration de donn�es sous forme de DOM comme suit:

    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
     
     
    // ... 
    // REQUETES SQL pour récuperer les données dans le fetch-assoc $rec...
     
     
    echo "<entries>";
    		echo		$rec['count(*)'];
    echo "</entries>";
     
    echo "<project_".$i.">";
     
    		// Information about Project
    		echo		"<projectId>";
    		echo			$rec['projectId'];
    		echo		"</projectId>";
     
    		echo 		"<title>";
    		echo			$rec['title'];
    		echo		"</title>";
     
    ...

    Dans mon script js Ajax je souhaite donc r�cup�rer ces infos pour les "parser" et les �crire dans mon document :

    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
    23
    24
    25
    26
    27
    // la r�ponse du traitement asynchrone effectu� en PHP
    var docXML = xhr.responseXML; 
    
    // Mon DOC parent
    var write_in = document.getElementById('ajax-ListProjects');
    	  
    		  // lines to add on the table
    		  var lines = docXML.getElementsByTagName("entries").values;
    		  
    		  for(i=0; i<lines; i++)
    		  {
    			  
    			  var tableTr = document.createElement("tr");	  
    			  if(i%2 != 0)
    			  	tableTr.setAttribute("class", "alt");
    			  
    			  write_in.appendChild(tableTr);
    			  
    			  
    			  var tdTitle = document.createElement("td");
    			  var title = createTextNode( docXML.getElementsByTagName("title")[i].value );
    			  tdTitle.appendChild(title);
    			  write_in.appendChild(tdTitle);
    
    // ... 
    }

    Et voici l'erreur que j'obtiens sous Firebug :
    docXML has no properties
    [Break on this error] var lines = docXML.getElementsByTagName("entries").value;
    Il semble donc que je ne puisse pas r�cuperer les infos ?!
    Pourtant en lan�ant ma page .php manuellement (hors appel ajax), j'obtiens bien l'affichage du texte entre mes balises "entries" :
    <entries _moz-userdefined="">1</entries>




    EDIT >>>
    Pour info, je suis parti de l'exemple illustr� sur ce tutoriel pour le principe.


    Merci de votre aide.

  2. #2
    Membre �prouv�
    Profil pro
    D�veloppeur Web
    Inscrit en
    Juillet 2007
    Messages
    112
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 112
    Par d�faut
    As tu bien pens� � ajouter la balise

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    header('Content-Type: text/xml');
    au d�but de ton fichier php ???

  3. #3
    Membre confirm�
    Inscrit en
    D�cembre 2007
    Messages
    78
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2007
    Messages : 78
    Par d�faut
    Merci d'avoir relev� ceci !

    Cel� dit j'ai un probl�me � mi-chemin : d�sormais ma page php construit bien mon DOM tree avec les infos r�cup�r�es depuis la base de donn�es, mais ces infos ne sont pas �crites dans mon document parent une fois la "responseXML" r�cup�r�e en Ajax.

    Pourquoi ?
    Il s'agit de mettre en forme ces donn�es sous forme de tableau, donc je cr��s des nodes "tr" et "td", ai-je bien le droit? Probl�me de syntaxe? (Je n'ai pas trouv� d'exemple dans mon bouquin Ajax, ils ne cr�ent que des div ! )

    Je vous remets ici une petite portion :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    if(xhr.readyState==4)
          {
    		  
    		  var docXML = xhr.responseXML;
    		  var write_in = document.getElementById('ajax-ListProjects');
    		  
    		  // lines to add on the table
    		  var lines = docXML.getElementsByTagName("entries").value;
    		  
    		  for(i=0; i<lines; i++)
    		  {
    			  
    			  var tableTr = document.createElement("tr");	  
    			  if(i%2 != 0)
    			  	tableTr.setAttribute("class", "alt");
    			  
    			  write_in.appendChild(tableTr);
    			  
    			  
    			  var tdTitle = document.createElement("td");
    			  var title = createTextNode( docXML.getElementsByTagName("title")[i].value );
    			  tdTitle.appendChild(title);
    			  write_in.appendChild(tdTitle);
    			  
    			  var tdLastupd = document.createElement("td");
    			  var lastupd = createTextNode("n/a");
    			  tdLastupd.appendChild(lastupd);
    			  write_in.appendChild(tdLastupd);
    
    ... 
                 }

    Les infos que je veux �crire devront donc �tre ins�r�es dans le <div id="ajax-ListProjects"> </div> , qui est lui m�me imbriqu� dans un <table></table> .

    Comme r�sultat, j'obtiens un grand vide � l'int�rieur du div "ajax-ListProjects".

    Je n'ai certainement pas bien compris le traitement DOM sous javascript...

    Dans la portion que je vous soumet, j'esp�rais comme r�sultat html cette structure:

    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
     
    <table>
    <div id="ajax-ListProjects">
         <tr>
                  <td>
                       // contenu de var title
                  </td>
     
                  <td>
                      // contenu de var lastupd
                  </td>
     
                  // ...
         </tr>
    </div>

  4. #4
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Bonjour,
    il existe des instructions sp�cifiques pour ajouter des lignes dans un tableau ...

    As-tu essay� ?

    A+

  5. #5
    Membre confirm�
    Inscrit en
    D�cembre 2007
    Messages
    78
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2007
    Messages : 78
    Par d�faut
    Citation Envoy� par E.Bzz Voir le message
    Bonjour,
    il existe des instructions sp�cifiques pour ajouter des lignes dans un tableau ...

    As-tu essay� ?

    A+
    On a post� en m�me tps. Merci, ca m'a l'air tout bon ce que tu proposes! Je vais tester ca.

    Merci !

  6. #6
    Membre confirm�
    Inscrit en
    D�cembre 2007
    Messages
    78
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2007
    Messages : 78
    Par d�faut
    J'voudrais pas abuser de votre patience mais j'aimerais savoir si niveau syntaxe ca vous paraissait bon (DOM):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var newRow = document.getElementById('myTable').insertRow(-1);
    			  if(i%2 != 0)
    			  	newRow.setAttribute("class", "alt");
    				
    var newCell = newRow.insertCell(0);
    newCell.innerHTML = docXML.getElementsByTagName("title")[i].value;
    
    newCell = newRow.insertCell(1);
    newCell.innerHTML = 'n/a';
    
    newCell = newRow.insertCell(2);
    newCell.innerHTML = docXML.getElementsByTagName("managerLname")[i].value+", "+docXML.getElementsByTagName("managerFname")[i].value;

    En gros je parse mon arbre DOM que j'ai construit au pr�alable, et qui est amen� � avoir cette t�te l� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <entries>2</entries>
     
    <project_1>
          <title>Titre bla bla</title>
          <desc>Description bla bla</desc>
          ...
    </project_1>
     
    <project_2>
          <title>Titre bla bla</title>
          <desc>Description bla bla</desc>
    </project_2>

    Voil� pourquoi je suis amen� � distinguer les noeuds title, desc, en fonction de leur indice.

    Est-ce que donc ceci:
    docXML.getElementsByTagName("title")[i].value;

    fait bien r�f�rence � mon titre du premier projet quand i=0 ?


    Merci.

  7. #7
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par n1n0x Voir le message
    Est-ce que donc ceci:
    docXML.getElementsByTagName("title")[i].value;

    fait bien r�f�rence � mon titre du premier projet quand i=0 ?
    A priori, oui ...

    A+

  8. #8
    Membre confirm�
    Inscrit en
    D�cembre 2007
    Messages
    78
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2007
    Messages : 78
    Par d�faut
    Dans ce cas je ne comprends pas pourquoi quand je fais :

    alert("test: "+docXML.getElementsByTagName("title")[0]);
    ca m'affiche bien "test: [ object Element ]"

    alors que :


    alert("test: "+docXML.getElementsByTagName("title")[0].value);
    affiche "test: undefined"


    Comment faire pour acc�der aux infos entre mes <tag></tag> du DOM ?
    .......

  9. #9
    Membre Expert 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
    Par d�faut
    .nodeValue, pas .value

Discussions similaires

  1. [AJAX] Appeler un script php apres traitement r�ponse Ajax
    Par lekunfry dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 20/10/2008, 13h34
  2. [DOM] [Ajax]responseXML et m�thodes DOM
    Par Herode dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 24/07/2006, 20h19
  3. [AJAX] texte r�ponse Ajax dans un conteneur div
    Par grinder59 dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 12/02/2006, 18h07
  4. [Prototype] La r�ponse Ajax...
    Par SpaceFrog dans le forum Biblioth�ques & Frameworks
    R�ponses: 24
    Dernier message: 25/01/2006, 14h36
  5. [AJAX] R�ponse XML - Functions Javascript
    Par ..:: Atchoum ::.. dans le forum G�n�ral JavaScript
    R�ponses: 24
    Dernier message: 24/01/2006, 03h02

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