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

Ayuda con llamada de archivos Ajax

Estas en el tema de Ayuda con llamada de archivos Ajax en el foro de Frameworks JS en Foros del Web. Que tal, hace tiempo compre el libro de Ajax Web2.0 para profesionales de Maximiliano Firtman, todo me funciono muy bn hasta el momento que quize ...
  #1 (permalink)  
Antiguo 19/03/2010, 19:00
 
Fecha de Ingreso: septiembre-2009
Mensajes: 58
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta Ayuda con llamada de archivos Ajax

Que tal, hace tiempo compre el libro de Ajax Web2.0 para profesionales de Maximiliano Firtman, todo me funciono muy bn hasta el momento que quize mandar a llamar a un archivo PHP que devuelve un XML, no puedo realizar el Parseo de Datos ya que al parecer no los reconoce pero no entiendo por que si lo unico que hago es invocar a un archivo que devuelve XML y esto lo verifica mi biblioteca.. aqui les dejo el codigo de la biblioteca AJAX.

Código:
/**
 * 
 * Librería AjaxLib v 1.0
 * 
 * Realiza peticiones AJAX de manera sencilla y automática.
 * 
 * @author Maximiliano R. Firtman [email protected]
 * 
 */


/** Especifica opciones para tipoRespuesta 
 */
var $tipo = {
	XML: 0,
	TEXTO: 1,
	JSON: 2	
}

/** Especifica opciones para método 
 */
var $metodo =  {
	GET: "GET",
	POST: "POST"
}


/**
 * Realiza un nuevo requerimiento AJAX a la url especificada
 * con las opciones definidas
 * @param {String} url La URL a donde realizar la petición
 * @param {Object} opciones Un objeto JSON con los atributos opcionales que queremos definirle.
 * 
 * opciones disponibles:
 * 	  id: Un identificador interno para ser recibido junto a los datos
 *    metodo: $metodo.POST o $metodo.GET
 *    tipoRespuesta: $tipo.TEXTO, $tipo.JSON o $tipo.XML
 *    parametros: un string en formato URL o un objeto Hash
 *    cache: true o false
 *    avisoCargando: define el id de un elemento que queremos usar 
 * 			como cartel de "Cargando" mientras la petición se hace
 *    onfinish: función a ejecutarse cuando se reciban los datos.
 * 		    Esta función recibirá el Texto, JSON o XML recibido y el id de la petición.
 *    onerror: función a ejecutarse cuando ocurra un error. 
 * 			Esta función recibe un objeto con detalles del error y el id de la petición
 */
function $Ajax(url, opciones) {	
	// Preguntamos si no quiere Caché
	if (__$P(opciones, "cache", true)==false){
		// Agregamos un parámetro random a la URL
		// Ponemos ? o & según ya haya parámetro anteriores
		var caracter = "?";
		if (url.indexOf("?")>0) caracter = "&";
		url += caracter + Math.random();
	}
	var metodo = __$P(opciones, "metodo", $metodo.GET);
	var parametros = __$P(opciones, "parametros");

	// Genera JSON de propiedades necesarias para Prototype
	// En un futuro puede ser reemplazado por otra librería
	var protoOpc = {
		method: metodo,
		onSuccess: __$AjaxRecibir.bind(this, opciones),
		onException: __$AjaxError.bind(this, opciones),
		onFailure: __$AjaxError.bind(this, opciones)
	}
	
	// Si se definieron los parámetros los agregamos
	if (parametros!=undefined) {
	    protoOpc.parameters = parametros;
	}
   
    // Genera la nueva petición vía Prototype
	var peticion = new Ajax.Request(url, protoOpc);
 
    // Prende el cartel de Cargando, si existiera
    if (__$P(opciones, "avisoCargando")!=undefined) {
    	__$AjaxCargando(opciones.avisoCargando, true);
    }    
    
}

/**
 * Función interna que se encarga de recibir la petición lista
 * desde Prototype y ejecutar el evento onfinish de la petición
 */
function __$AjaxRecibir(opciones, xhr) {
    // Si se ejecuta este método estamos seguros que 
    // readyState==4 y status==200 
    
    // Apagamos cartel de Cargando si existiera 
    if (__$P(opciones, "avisoCargando")!=undefined) {
    	__$AjaxCargando(opciones.avisoCargando, false);
    }      
    
    // Traemos la función onfinish si fue definida
    var funcionRetorno = __$P(opciones, "onfinish");
    // Traemos el identificador de la petición si fue definido
    var id = __$P(opciones, "id");
    
	if (funcionRetorno!= undefined) {
	    // Si el usuario indicó que quiere recibir la respuesta
	    // Suponemos TEXTO como tipo por defecto.
	    var tipoRespuesta = __$P(opciones, "tipoRespuesta", $tipo.TEXTO);
		switch(tipoRespuesta) {
			case $tipo.TEXTO:
				funcionRetorno(xhr.responseText, id);				
				break;
			case $tipo.XML:
			    funcionRetorno(xhr.responseXML, id);				
				break;
			case $tipo.JSON:
			   // Intentamos evaluar el JSON por si no es válido
			   var objeto;
			   try {
				    objeto = xhr.responseText.evalJSON();
			   } catch (e) {
					__$AjaxError(opciones, xhr, {code: -1, message: "JSON No válido" });
				    return;
			   }
			   funcionRetorno(objeto, id);
		}			
	}	
	
}



/**
 * Función interna que se encarga de prender o apagar el cartel
 * de Cargando, si existiera
 */
function __$AjaxCargando(cartel, prender) {
    if (prender) {
        $(cartel).show();
    } else {
        $(cartel).hide();
    }
}

/**
 * Función interna que se encarga de recibir la ejecución
 * cuando ocurra algún error en la petición desde Prototype
 */
function __$AjaxError(opciones, xhr, excepcion) {
    // Apagamos cartel de Cargando si existiera 
   if (__$P(opciones, "avisoCargando")!=undefined) {
   		__$AjaxCargando(opciones.avisoCargando, false);
   }   	
	
   // Cuando se trata de un error de servidor, no hay excepción
   if (excepcion==undefined) {
        // Supongo error de HTTP, genero mensaje propio
        excepcion = {code: xhr.status, message: "Error del servidor"}
   }   
   // Consulto si estaba definida el evento onerror
   var funcionError = __$P(opciones, "onerror");
   if (funcionError!=undefined) {
        funcionError(excepcion, __$P(opciones, "id"));
   }
}

/**
 * Función interna que se encarga de entregar un parámetro opcional
 * desde una colección tipo JSON, con un valor por defecto
 */
function __$P(coleccion, parametro, defecto) {
	if (coleccion==undefined) {
		return defecto;
	} else {
		if (coleccion[parametro]==undefined) {
			return defecto;
		} else {
			return coleccion[parametro];
		}
	}
}
Asi mismo aqui les dejo el codigo del archivo XML
Código:
<?xml version="1.0" encoding="iso-8859-1"?>

<rss version="2.0"> 
  <channel> 
    <title><![CDATA[ELPAIS.com - Última Hora]]></title> 
    <link><![CDATA[http://www.elpais.com/loultimo/]]></link> 
    <description><![CDATA[ELPAIS.com - Última Hora]]></description>
    <language>es-es</language> 
    <copyright><![CDATA[Copyright PRISACOM S.A]]></copyright>
    <ttl>15</ttl> 

	<image>
		<url>http://www.elpais.com/im/tit_logo.gif</url>

		<title>ELPAIS.com - Última Hora</title>
		<link>http://www.elpais.com</link>
	</image>


  
  <item>
    <title><![CDATA[Un bebé con licencia de armas]]></title>
    <link><![CDATA[http://www.elpais.com/articulo/internacional/bebe/licencia/armas/elpepuint/20070516elpepuint_10/Tes]]></link>
    <description><![CDATA[El pequeño Bubba Ludwig, de 10 meses, recibió de su abuelo una herencia peculiar: una escopeta. Su padre, Howard, empezó a preocuparse por que su retoño no pudiera disfrutar pronto del regalo, así que solicitó para él una licencia de armas. No tenía muchas esperanzas de conseguirlo, pero rellenó la solicitud <i>on-line</i>, pagó los 5 dólares y el permiso fue suyo, según informa la web <i>BBC NEWS</i>.]]></description>

    <guid isPermaLink="true"><![CDATA[http://www.elpais.com/articulo/internacional/bebe/licencia/armas/elpepuint/20070516elpepuint_10/Tes]]></guid>
    <author><![CDATA[ELPAIS.com/AGENCIAS <[email protected]>]]></author>
    <pubDate><![CDATA[Wed, 16 May 2007 18:28:00 +0200]]></pubDate>
  </item>

  <item>
    <title><![CDATA[La PS3 y las baterías de litio lastran el crecimiento de Sony]]></title>
    <link><![CDATA[http://www.elpais.com/articulo/internet/PS3/baterias/litio/lastran/crecimiento/Sony/elpeputec/20070516elpepunet_8/Tes]]></link>
    <description><![CDATA[Los beneficios de Sony crecieron en 2006 menos de lo esperado. .]]></description>

    <guid isPermaLink="true"><![CDATA[http://www.elpais.com/articulo/internet/PS3/baterias/litio/lastran/crecimiento/Sony/elpeputec/20070516elpepunet_8/Tes]]></guid>
    <author><![CDATA[EFE / ELPAIS.com <[email protected]>]]></author>
    <pubDate><![CDATA[Wed, 16 May 2007 18:26:00 +0200]]></pubDate>
  </item>
  </channel>
</rss>
Cuando lo converti a PHP lo unico que hice fue colocar todo en un ECHO
quedo asi:
Código PHP:
<?php
echo"<?xml version='1.0' encoding='iso-8859-1'?>
.
.
.
.
.
  </channel>
</rss>"
;
?>
No entiendo por que al llamarlo con PHP no me lo detecta y por que al llamarlo con XML todo me lo devuelve bn No se si me puedan ayudar, ya estudie la biblioteca de AJAX... pero sigo sin poder encontrar el problema y es que para otro proyecto necesito que PHP se conecte a una BD para extraer datos y que JS pueda Parsearlos correctamente... Ayuda Plis... si hace falta algun dato por favor avisarme...
asi mismo les agrego el HTML todo lo tengo en carpetas distintas...

Espero me puedan ayudar...
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>RSS</title>
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/ajax.js"></script>
<script type="text/javascript" src="lector.js"></script>
<script type="text/javascript" src="../js/src/scriptaculous.js?load=effects"></script>
<link href="rss.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="divTitulo"></div>
<input type="button" value="Actualizar" id="btnActualizar" />
<div id="divContenedor">
<div id="divItems"></div>
<div id="divDetalle">
<div id="lblTituloItem"></div>
<div id="lblTextoItem"></div>
<div id="lblFechaItem"></div>
<div id="lblLinkItem"></div>
</div>
</div>
<div id="divLoading" style="display: none">Por Favor Espere...</div>
</body>
</html> 
EDITE UN POCO EL XML, ya que tenia muchos caracteres....
Help
  #2 (permalink)  
Antiguo 19/03/2010, 20:28
 
Fecha de Ingreso: septiembre-2009
Mensajes: 58
Antigüedad: 15 años, 2 meses
Puntos: 1
De acuerdo Respuesta: Ayuda con llamada de archivos Ajax

Ya lo Solucione muchas gracias aunque no hubo respuestas.... pero de igual manera fues este foro el que me ayudo a encontrar mi respuesta el problema es que en el php no estaba definiendo que tipo de texto me devolvia y por eso no cancelaba los demas procesos jeje... Gracias de todas maneras
  #3 (permalink)  
Antiguo 19/03/2010, 23:14
 
Fecha de Ingreso: septiembre-2009
Mensajes: 58
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta Respuesta: Ayuda con llamada de archivos Ajax

Por que en el Caso de que lo corra en una maquina local si me detecta los header pero al subirla a internet toda la aplicacion la respuesta me la devuelve como tipo text/html y yo le estableci el header para text/xml.... No entiendo por que pasa esto Ayuda.. mi aplicacion funciona bn en mi servidor local
  #4 (permalink)  
Antiguo 05/06/2010, 11:42
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Ayuda con llamada de archivos Ajax

Cita:
Iniciado por MaxMental Ver Mensaje
Ya lo Solucione muchas gracias aunque no hubo respuestas.... pero de igual manera fues este foro el que me ayudo a encontrar mi respuesta el problema es que en el php no estaba definiendo que tipo de texto me devolvia y por eso no cancelaba los demas procesos jeje... Gracias de todas maneras
Hola estimado una preguntota, a ver si sabes, mira yo compre el mismo libro y lo que quiero hacer es algo parecido, solamente que mediante sesiones obtendre cierta variable en php, posteriormente deberia armar la etiqueta <li id=consulta>
quedaria un link a consulta.php. lo que yo necesito es meter esa variable para que el link quede consulta.php?var=mexico, y en su caso agragar mas variables. a ver si alguien me puede hechar la mano, par aarmar esas variables.

saludos.

Etiquetas: ajax, carga, hcss, html, servidorphp, xmlarchivo, parse, busquedas, bases-de-datos
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 15:20.