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 originalfunction cargarProductos(producto){
var httpRequest;
if (window.XMLHttpRequest)
{
//El explorador implementa la interfaz de forma nativa
httpRequest = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
//El explorador permite crear objetos ActiveX
try {
httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4) {
if (httpRequest.status ==200){
//se establece que es un archivo xml lo que se recibe y se parsea
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(httpRequest.responseText, "application/xml");
/*
cuerpo
<root>
<producto>
<nombre>...</nombre>
<idcategoria>...</idcategoria>
</producto>
<producto>
<nombre>...</nombre>
<idcategoria>...</idcategoria>
</producto>
...
</producto>
</root>
*/
var root= xmlDoc.getElementsByTagName("producto");
for (var i=0; i< root.length; i++){
//se debe de saltar de 2 en 2 en cada nodo hijo
//los indices pares no tienen texto
var nombre= root[i].childNodes[1].textContent;
var idCategoria= root[i].childNodes[3].textContent;
//muestra #text en todos los indices pares
alert(root[i].childNodes[0].nodeName);
//se añade el fieldset con los datos correspondientes
var divisor= document.getElementById("productos");
var campo= document.createElement("fieldset");
var texto= document.createTextNode("Nombre= "+nombre+" idcategoria= "+idCategoria);
campo.appendChild(texto);
divisor.appendChild(campo);
}
}
}
}
httpRequest.open('GET', '../ajax/ObtenerProductos.php?math=' + Math.random(), true);
httpRequest.send(null);
return false;
}
Código PHP:
Ver original<?php
$_Root= $_SERVER['DOCUMENT_ROOT'];
require_once $_Root.'/ProductoDAO.php';
$_Consulta= ProductoDAO::BuscarTodosPorCategoria('pizza');
$doc = new DOMDocument();
$doc->formatOutput= true;
$root = $doc->createElement('root');
$root = $doc->appendChild($root);
foreach ($_Consulta as $Datos){
$producto= $doc->createElement('producto');
$producto= $root->appendChild($producto);
$nombreTag = $doc->createElement('nombre');
$nombreTag = $producto->appendChild($nombreTag);
$textNombre = $doc->createTextNode($Datos->getNombre());
$textNombre = $nombreTag->appendChild($textNombre);
$idCategoria= $doc->createElement('idcategoria');
$idCategoria= $producto->appendChild($idCategoria);
$textIDCategoria= $doc->createTextNode($Datos->getCategoria());
$textIDCategoria= $idCategoria->appendChild($textIDCategoria);
}
echo $doc->saveXML();
?>
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