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

"Atras y Adelante" con Ajax

Estas en el tema de "Atras y Adelante" con Ajax en el foro de Frameworks JS en Foros del Web. Hola: Soy medianamente nuevo en este foro. Mi duda es la siguiente: Estoy desarrollando una aplicación Web con PHP, y estoy utilizando Ajax para cargar ...
  #1 (permalink)  
Antiguo 30/07/2007, 07:38
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 20 años, 5 meses
Puntos: 1
"Atras y Adelante" con Ajax

Hola:

Soy medianamente nuevo en este foro. Mi duda es la siguiente:

Estoy desarrollando una aplicación Web con PHP, y estoy utilizando Ajax para cargar varias opciones dentro de un <DIV> HTML que está ubicado en el centro de la página. No soy experto en Ajax, y el problema que se me presenta al cargar las páginas en el <DIV> mencionado, es que el botón Atrás del Navegador no se activa, me imagino que esto se debe a la navegación asincrónica.

Me gustaría que el botón atrás y adelante siguiera funcionando normalmente a pesar de utilizar ajax, ya que no quiero violar una de las reglas principales de usabilidad.

Saludos y desde ya muchas gracias.
  #2 (permalink)  
Antiguo 30/07/2007, 08:58
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Re: "Atras y Adelante" con Ajax

Hola:

Los botones del navegador se comportan según se "navegue" con enlaces y destinos de formularios... o sea cambiando la dirección web; pero si utilizas la tecnología ajax no cambias la url, así que el navegador no "registra" un cambio de dirección.

No creo que tenga que ver con la usabilidad. Siempre puedes implementar tus propios botones adelante y atrás, incluso mejorarlos, ya que no tienes que sobre-escribir capas y un "paso atrás" debería ser más inmediato que el botón atrás del navegador.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 30/07/2007, 09:31
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 20 años, 5 meses
Puntos: 1
Re: "Atras y Adelante" con Ajax

Gracias por tu respuesta.

Pero por ejemplo, ¿cómo lo hace Gmail para que los botones "atrás" y "adelante" funcionen a pesar de no cambiar su URL?

Con respecto a la usabilidad, en lo personal creo que sí tiene que ver porque estaría quitando el control que tiene el usuario sobre estos botones, además si agrego botones atrás y adelante en mi aplicación sería algo redundante (pienso yo).

Aqui les dejo cómo llamo a las páginas, a ver si me pueden echar una manito para que los botones atrás y adelante del navegador funcionen como siempre:


Este onclick lo pongo dentro de un HREF:

Código:
onClick="FAjax ('inicio.php?<?=sid?>','div_centro','','post')";
Y el <DIV> donde se va cambiando la página según se escoja en el menú:

Código HTML:
<div id="div_centro"></div> 
Función AJAX (la típica):

Código:
function creaAjax() {
         var objetoAjax=false;
         try {
          /*Para navegadores distintos a Internet Explorer*/
          objetoAjax = new ActiveXObject("Msxml2.XMLHTTP");
         } 
		 catch (e) {
		  try {
			   /*Para Internet Explorer*/
			   objetoAjax = new ActiveXObject("Microsoft.XMLHTTP");
		  }
		  catch (E) {
			objetoAjax = false;
		  }
         }

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

function FAjax (url,capa,valores,metodo) {

        var ajax=creaAjax();
        var capaContenedora = document.getElementById(capa);
		
		/* variable para almacenar el mensaje que se muestra mietras ajax carga una página*/
		var cargando  = "<table border='0' align='center' cellpadding='0' cellspacing='0'>";
			cargando += "<tr><td>&nbsp;</td></tr>";
			cargando += "<tr><td align='center'>";
			cargando += "<img src='images/loading.gif' alt=''>";
			cargando += "</td></tr>";
			cargando += "<tr><td align='center'>";
			cargando += "<font face='verdana' size='1' color='#333333'>";
			cargando += "Cargando...";
			cargando += "</font>";
			cargando += "</td></tr>";
			cargando += "</table>";

		/*Crea y ejecuta la instancia si el metodo elegido es POST*/
		if(metodo.toUpperCase()=='POST'){
			 ajax.open ('POST', url, true);
			 ajax.onreadystatechange = function() {
				 if (ajax.readyState==1) {
					capaContenedora.innerHTML = cargando;
				 }
				 else if (ajax.readyState==4) {
						   if(ajax.status==200) {
								document.getElementById(capa).innerHTML=ajax.responseText;
						   }
						   else if(ajax.status==404) {
							capaContenedora.innerHTML = "<center>La direcci&oacute;n no existe</center>";
						   }
						   else {
							capaContenedora.innerHTML = "Error: ".ajax.status;
						   }
				}
	   		 }
	   		 ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		     ajax.send(valores);
		     return;
		} 
		/*Crea y ejecuta la instancia si el metodo elegido es GET*/
		if (metodo.toUpperCase()=='GET'){
		
				 ajax.open ('GET', url, true);
				 ajax.onreadystatechange = function() {
				 if (ajax.readyState==1) {
					capaContenedora.innerHTML = cargando;
				 }
				 else if (ajax.readyState==4){
						   if(ajax.status==200){
							 document.getElementById(capa).innerHTML=ajax.responseText;
						   }
						   else if(ajax.status==404)
													 {
		
									capaContenedora.innerHTML = "<center>La direcci&oacute;n no existe</center>";
													 }
													 else
													 {
									capaContenedora.innerHTML = "Error: ".ajax.status;
													 }
											}
						  }
				 ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				 ajax.send(null);
				 return
		}
}
  #4 (permalink)  
Antiguo 30/07/2007, 11:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Re: "Atras y Adelante" con Ajax

Hola:

Sobre GMail, no he revisado su código, pero recuerdo que hubo un tema en donde se comentó la implementación ajax de GMail, y recuerdo que usaba un iframe oculto y enlazaba a él... esa no es tecnología ajax, sino simplemente enlazar a un iframe...

Sobre los botones, la implementación nunca sería para cambiar una url, pero si servirían para no volver a cargar datos ya cargados... un ejemplo muy sencillo sería una galería paginada; yo uso esa técnica y se gana mucho en velocidad de carga.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 30/07/2007, 11:15
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 20 años, 5 meses
Puntos: 1
Re: "Atras y Adelante" con Ajax

Probaré eso de los iframes ocultos, muchas gracias por tu ayuda.
  #6 (permalink)  
Antiguo 27/08/2007, 12:42
 
Fecha de Ingreso: febrero-2007
Ubicación: En lima
Mensajes: 76
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: "Atras y Adelante" con Ajax

Aqui hay uno pero creo que usa prototype y yo no quieo usar eso, yo no le entiendo mucho al codigo ,haber si lo entiendes y me explicas el funcionamiento para que lo implemente con jquery.

Articulo
http://pragmaticobjects.org/index.php?itemid=11
Script
http://pragmaticobjects.org/ajaxPetG.../js/history.js

Saludos
  #7 (permalink)  
Antiguo 13/09/2007, 15:44
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 20 años, 5 meses
Puntos: 1
Re: "Atras y Adelante" con Ajax

uff, perdón por no haberte respondido antes. Lo que ocurrió fue que no me hice problemas con el asunto de "atrás y adelante", así que me centré en usar ajax sólamente para cargar páginas y combobox. Siempre utilicé botones que permitieran regresar y avanzar, así que los botones del navegador para ir hacia atrás o hacia adelante nunca se activan.

Para mi caso creo que esto es suficiente, ya que el proyecto que estoy desarrollando es un sistema intranet, y los usuarios acostumbrados a utilizar herramientas cliente/servidor no creo que echen de menos estos botones en el navegador.

Ahora estoy modificando la función FAJAX para controlar el tiempo de espera, es decir, si está esperando respuesta por más de un cierto tiempo, que muestre un mensaje o que no siga con el mensaje "cargando..." y registrar este evento en un archivo de texto (un log de errores).

Saludos y gracias por la ayuda.
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 20:00.