Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/08/2013, 18:57
starfix
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
ajax+php nodeName indices pares =#text

ayer empece a estudiar javascript y me encontré con un problema a la hora de leer un archivo xml devuelto por un script php. Primero les muestro el codigo JS y el PHP:

Código Javascript:
Ver original
  1. function cargarProductos(producto){
  2.    
  3.     var httpRequest;
  4.     if (window.XMLHttpRequest)
  5.     {
  6.             //El explorador implementa la interfaz de forma nativa
  7.             httpRequest = new XMLHttpRequest();
  8.     }
  9.     else if (window.ActiveXObject)
  10.     {
  11.             //El explorador permite crear objetos ActiveX
  12.             try {
  13.                     httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
  14.             } catch (e) {
  15.                     try {
  16.                             httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
  17.                     } catch (e) {}
  18.             }
  19.     }
  20.    
  21.        
  22.     httpRequest.onreadystatechange = function() {
  23.         if (httpRequest.readyState == 4) {
  24.             if (httpRequest.status ==200){
  25.  
  26.             //se establece que es un archivo xml lo que se recibe y se parsea    
  27.             var parser = new DOMParser();
  28.             var xmlDoc = parser.parseFromString(httpRequest.responseText, "application/xml");
  29.  
  30.             /*
  31.             cuerpo
  32.             <root>
  33.                 <producto>
  34.                     <nombre>...</nombre>
  35.                     <idcategoria>...</idcategoria>
  36.                 </producto>
  37.                 <producto>
  38.                     <nombre>...</nombre>
  39.                     <idcategoria>...</idcategoria>
  40.                 </producto>
  41.                 ...
  42.                 </producto>
  43.             </root>
  44.             */
  45.             var root= xmlDoc.getElementsByTagName("producto");
  46.            
  47.            
  48.             for (var i=0; i< root.length; i++){
  49.                
  50.                 //se debe de saltar de 2 en 2 en cada nodo hijo
  51.                 //los indices pares no tienen texto
  52.                 var nombre= root[i].childNodes[1].textContent;
  53.                 var idCategoria= root[i].childNodes[3].textContent;
  54.  
  55.                 //muestra #text en todos los indices pares
  56.                 alert(root[i].childNodes[0].nodeName);
  57.                
  58.                 //se añade el fieldset con los datos correspondientes
  59.                 var divisor= document.getElementById("productos");
  60.                 var campo= document.createElement("fieldset");
  61.                 var texto= document.createTextNode("Nombre= "+nombre+" idcategoria= "+idCategoria);
  62.                 campo.appendChild(texto);
  63.                 divisor.appendChild(campo);
  64.             }
  65.             }  
  66.         }      
  67.     }
  68.    
  69.     httpRequest.open('GET', '../ajax/ObtenerProductos.php?math=' + Math.random(), true);
  70.     httpRequest.send(null);
  71.  
  72.     return false;
  73. }

Código PHP:
Ver original
  1. <?php
  2.  
  3. $_Root= $_SERVER['DOCUMENT_ROOT'];
  4.  
  5. require_once $_Root.'/ProductoDAO.php';
  6.  
  7. $_Consulta= ProductoDAO::BuscarTodosPorCategoria('pizza');
  8.  
  9. $doc = new DOMDocument();
  10. $doc->formatOutput= true;
  11.  
  12. $root = $doc->createElement('root');
  13. $root = $doc->appendChild($root);
  14.  
  15.  
  16. foreach ($_Consulta as $Datos){
  17.    
  18. $producto= $doc->createElement('producto');
  19. $producto= $root->appendChild($producto);
  20.  
  21.  
  22. $nombreTag = $doc->createElement('nombre');
  23. $nombreTag = $producto->appendChild($nombreTag);
  24.  
  25. $textNombre = $doc->createTextNode($Datos->getNombre());
  26. $textNombre = $nombreTag->appendChild($textNombre);
  27.  
  28. $idCategoria= $doc->createElement('idcategoria');
  29. $idCategoria= $producto->appendChild($idCategoria);
  30.  
  31. $textIDCategoria= $doc->createTextNode($Datos->getCategoria());
  32. $textIDCategoria= $idCategoria->appendChild($textIDCategoria);
  33.    
  34. }
  35.  
  36. echo $doc->saveXML();
  37. ?>


el problema lo puse en el alert(root[i].childNodes[0].nodeName); en la linea 56 del JS. Me muetra #text con cualquier indice par, o sea, al xml se le agregan datos que no los puse yo.



si necesitan mas informacion pidanla, recien estoy comenzando con JS y me costo mucho esto, pero no entiendo esa parte .

saludos