Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/09/2009, 20:19
zero221188
 
Fecha de Ingreso: octubre-2008
Ubicación: México
Mensajes: 10
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problema al leer un xml mediante url

Saludos... en mi recomendacion te sugiero usar:

1.- Una variable global para hacer consultas al servidor:
Código:
var p_http=null;
2.- Una funcion para inicializar dicha variable para usarla con Ajax:
Código:
function ini_xml()
{
p_http=null;
if(window.XMLHttpRequest)
   return new XMLHttpRequest();
else if(window.ActiveXObject)
   return new ActiveXObject("Microsoft.XMLHTTP");
}
3.- Una funcion para hacer peticiones:
Código:
function request(url,p,send){
p_http=ini_xml();
if(p_http)
{switch(p)
{
case 1: p_http.onreadystatechange = funcion_de_respuesta_1; break;
case 2: p_http.onreadystatechange = funcion_de_respuesta_2; break;
case 3: p_http.onreadystatechange = funcion_de_respuesta_3; break;
case 4: p_http.onreadystatechange = funcion_de_respuesta_4; break;
case 5: p_http.onreadystatechange = funcion_de_respuesta_5; break;
}
p_http.open("POST",url,true);
p_http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
p_http.send(send);
}
}
Ok, hasta aqui, tienes ya armada toda la estructura para solicitar informacion a un servidor en formato XML... ahora solo tienes que armas las funciones que requieres, es decir, una funcion que le indique a la funcion "request" tres cosas => ¿Que quieres? ¿Como lo quieres? ¿Como lo sirvo Señor?

El parametro URL le indica a la funcion a donde debe hacer la solicitud (Que quieres?)
El parametro send es que variables le enviaras al servidor (Como lo quieres?)
El parametro p es decirle que ejecute una funcion especifica al recibir la respuesta (Como lo sirvo Señor?)

Asi que...

4.- Funcion que haga la solicitud...
Código:
function traiga_mi_comida(x)
{
	request("traiga_mi_comida.php",3,"comida="+x);
}
En este caso... le he solicitado al servidor (de comida XD) que valla a "traiga_mi_comida" y me sirva con las instrucciones de la funcion 3, y que la comida sea segun mis especificaciones en x.

Ahora... solo falta decirle como es la funcion 3... (o cualquier otra que definas)

5.-

Código:
function funcion_de_respuesta_3(){if(rev_est())
{
	resultado = p_http.responseXML.getElementByTagName("comida").firschild.nodeValue;
        alert("Su comida Señor =>"+resultado);
}}
Y listo... me ha servido la comida...

Por si no lo notas... tambien incluyo una funcion "rev_est()"... esto es... revisar el estado en que se encuentra la solicitud al servidor... hay 5 estados... (del 0 al 4) digamoslo asi:

0.- Me tomaron la orden.
1.- Entregaron la Orden al Chef
2.- El Chef esta preparando ... mmm....
3.- El chef termino... viene enseguida
4.- Ya está en mi mesa... A comer !!!

Como no puedo disponer de la informacion (y mi comida) hasta que me la sirvan, es importante que verifique si ya está, antes de comermela :P

Para eso:

Código:
var READY=4;
function rev_est(){if(p_http.readyState == READY && p_http.status == 200)return true;else return false;}
Esta funcion tambien revisa que la informacion (nuestra comida) se halla entregado correctamente... (.status == 200) y que el servidor no cometio errores... (no queremos morir envenedados o si ??)

Aplicado a tu lector RSS (y no a la comida)... solo tienes que definir tu funcion de solicitus y tu funcion de respuesta.

Código:
function traer_xml()
{
   request("mi_xml.php",5,"noticias=deportes");
}
function funcion_de_respuesta_5()
{
   resultado = p_http.responseXML;
   ..... y de qui en adelante lo que desees hacer con el...
}
De igual forma podrias cargar XML estaticos sin no se crean con PHP o ASP o etc... de forma dinamica... solo altera un poco la funcion request a como la necesites...

Y Buen provecho !!!

Última edición por zero221188; 14/09/2009 a las 20:29