Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema al leer un xml mediante url

Estas en el tema de Problema al leer un xml mediante url en el foro de Frameworks JS en Foros del Web. Hola! Estoy haciendo un lector RSS con AJAX el cual recibe el xml que debe interpretar a través de URL, el código es este: Código: ...
  #1 (permalink)  
Antiguo 14/09/2009, 14:59
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 15 años, 2 meses
Puntos: 0
Problema al leer un xml mediante url

Hola! Estoy haciendo un lector RSS con AJAX el cual recibe el xml que debe interpretar a través de URL, el código es este:

Código:
   <script language="javascript">
	function crearMotorAJAX(){
	  var motorAJAX=false;

	  try{
		motorAJAX = new ActiveXObject("Msxml2.XMLHTTP");
	  }catch(e){
		  try{
			motorAJAX = new ActiveXObject("Microsoft.XMLHTTP");
		  }catch(e){
			motorAJAX = false;
		  }
	  }

		if (!motorAJAX && typeof XMLHttpRequest!='undefined') {
		  motorAJAX = new XMLHttpRequest();
		}
		return motorAJAX;
	}

	function cargaRSS() {
		var objAJAX=crearMotorAJAX();
		objAJAX.open('POST', 'URL DEL XML', false);
		objAJAX.send(null);
		var docXML = objAJAX.responseXML;
		alert (docXML.hasChildNodes());
	}
	
	</script>
Y el problema es que no me devuelve nada, es como si no pasara nada, por si sirve de ayuda, firefox me da el siguiente error:

Error: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: cargaRSS :: line 26" data: no]

La línea 26 que marca el error es la que pone: objAJAX.send(null);
  #2 (permalink)  
Antiguo 14/09/2009, 20:19
 
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
  #3 (permalink)  
Antiguo 15/09/2009, 12:52
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problema al leer un xml mediante url

Gracias zero221188, tendré en cuenta tus recomendaciones a la hora de programar!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:28.