Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Problema con función Ajax de jQuery

Estas en el tema de Problema con función Ajax de jQuery en el foro de Jquery en Foros del Web. Hola amigos del foro, mi problema es el siguiente: En el menú de opciones de mi aplicación web, implementé una función para que al dar ...
  #1 (permalink)  
Antiguo 19/07/2013, 11:55
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Problema con función Ajax de jQuery

Hola amigos del foro, mi problema es el siguiente:

En el menú de opciones de mi aplicación web, implementé una función para que al dar un clic a cada opción del menú, abra una página dentro de un div haciendo uso de la función Ajax de jQuery. Esta es la función:

Código:
function mostrar_pagina(capa, pagina){
	$(function(){
		$.ajax({
			url: pagina,
			beforeSend:function(){
			  $("#cargando").show();
			},
			success:function(url){
				$("#"+capa).html(url);
				$("#cargando").hide();
			}
		});
	});
}
Y cada enlace del menú de opciones es así:

Código HTML:
<a href="javascript: mostrar_pagina('principal', '../Fichas/ver_fichas.php')" class="arrow">Nombre del enlace</a> 
Al final del menú de opciones se encuentre el DIV de ID "principal" que es en donde cargarán las páginas. El detalle está en que cuando doy clic al enlace para abrir la página, solo se muestra el gif que indiqué para que se vea mientras carga a la apertura de la página, en teoría esta carga solo debería durar unos segundos, sin embargo, queda cargando y no se llega a mostrar la página, tengo que dar un segundo clic a la opción para que finalmente pueda mostrarse la página.

La información que muestra Firebug en Firefox indica que al dar el primer clic, se ejecuta la función y el proceso tiene una demora de 391 milésimas de segundo, mientras que cuando doy el segundo clic, la demora es de 47 ms, que es cuando finalmente carga la página y se muestra. El problema es el mismo con todos los enlaces del menú, sin embargo, luego de haber dar el segundo clic a una opción, el resto de enlaces y el mismo enlace ejecutan la carga con 1 solo clic.

Intenté eliminando beforeSend que muestra el gif de espera pero da igual pues solo muestra el gif, no afecta a la ejecución de la función.

¿Cuál puede ser el problema y cómo puedo darle solución?

Última edición por Alexis88; 19/07/2013 a las 13:36
  #2 (permalink)  
Antiguo 19/07/2013, 16:31
 
Fecha de Ingreso: julio-2013
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Problema con función Ajax de jQuery

intenta con esto quitando el validador de jQuery

esa función solo se usa para que después que se haya cargado jQuery pueda lazar eventos


Código Javascript:
Ver original
  1. function mostrar_pagina(capa, pagina){
  2.  
  3.         $.ajax({
  4.             url: pagina,
  5.             beforeSend:function(){
  6.               $("#cargando").show();
  7.             },
  8.             success:function(url){
  9.                 $("#"+capa).html(url);
  10.                 $("#cargando").hide();
  11.             }
  12.         });
  13.  
  14. }
  #3 (permalink)  
Antiguo 19/07/2013, 17:14
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Problema con función Ajax de jQuery

Hola wolfoxley, ya había intentado eso en otras funciones que implementé en mi aplicación y aunque para este caso no lo había hecho, acabo de realizar la edición que me sugieres pero el resultado es el mismo.
  #4 (permalink)  
Antiguo 21/07/2013, 06:55
 
Fecha de Ingreso: julio-2013
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Problema con función Ajax de jQuery

intenta añadiendo estos argumentos mas...
Código Javascript:
Ver original
  1. $.ajax({
  2.   type: "GET", //get, post
  3.   dataType: "json" //json , text, ect.
  4. });

utiliza la consola de chrome para ver que esta pasando.. espero que ayude
  #5 (permalink)  
Antiguo 21/07/2013, 22:18
Avatar de vesper_metal90  
Fecha de Ingreso: enero-2013
Mensajes: 103
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Problema con función Ajax de jQuery

Tal vez esto te ayude


http://api.jquery.com/load/
  #6 (permalink)  
Antiguo 21/07/2013, 23:39
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Problema con función Ajax de jQuery

Hola amigos, revisando una función Ajax que tenía guardada pude pensar en la forma de dar solución a esto. Ya que luego del primer clic la carga de la página consultada queda en espera o "cargando", tomo el estado de dicha carga con "readyState" y verifico, si es igual a 1, es decir, si está cargando, vuelvo a ejecutar el procedimiento.

Código Javascript:
Ver original
  1. function mostrar_pagina(capa, pagina){
  2.     $.ajax({
  3.         url: pagina,
  4.         beforeSend:function(){
  5.           $("#cargando").show();
  6.         },
  7.         success:function(url){
  8.             $("#"+capa).html(url);
  9.             $("#cargando").hide();
  10.         }
  11.     });
  12.        
  13.     if($.ajax().readyState==1){
  14.         $.ajax({
  15.             url: pagina,
  16.             beforeSend:function(){
  17.               $("#cargando").show();
  18.             },
  19.             success:function(url){
  20.                 $("#"+capa).html(url);
  21.                 $("#cargando").hide();
  22.             }
  23.         });
  24.     }
  25. }

Es una solución poco ortodoxa pero efectiva, ha funcionado a la perfección con todos los enlaces. Espero que esto sirva a quienes tengan el mismo problema que tuve.

Saludos amigos.
  #7 (permalink)  
Antiguo 03/08/2013, 17:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Problema con función Ajax de jQuery

Jugando un poco con los códigos, encontré otra solución para la cual necesito menos líneas de código:
Código Javascript:
Ver original
  1. function mostrar_pagina(capa, pagina){
  2.     $.ajax({success:function(){}});
  3.        
  4.     $.ajax({
  5.         url: pagina,
  6.         beforeSend:function(){
  7.             $("#cargando").show();
  8.         },
  9.         success:function(url){
  10.             $("#"+capa).html(url);
  11.             $("#cargando").hide();
  12.         }
  13.     });
  14. }

Aparentemente no se realiza la petición en el primer intento, por eso es que recién al segundo intento se realiza el proceso por completo, lo malo está en que esto solo pasaba la primera vez que intentaba acceder a una de las opciones del menú, luego de eso no habían problemas, por lo que con la doble ejecución de la función, las siguientes consultas se verían afectadas, pero con este script ya no sucede eso y todo marcha como debe ser.

Última edición por Alexis88; 04/08/2013 a las 04:50

Etiquetas: ajax
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 18:29.