Foros del Web » Programando para Internet » Jquery »

Error con efecto "cargando" en algunos navegadores

Estas en el tema de Error con efecto "cargando" en algunos navegadores en el foro de Jquery en Foros del Web. Hola a todos: Me sucede en muchos sitios web (seguro que será por alguna tontería) que intento poner un efecto de "cargando" pero solo me ...
  #1 (permalink)  
Antiguo 07/01/2015, 15:38
Avatar de victor5atodogas  
Fecha de Ingreso: junio-2010
Mensajes: 447
Antigüedad: 13 años, 10 meses
Puntos: 2
Error con efecto "cargando" en algunos navegadores

Hola a todos:

Me sucede en muchos sitios web (seguro que será por alguna tontería) que intento poner un efecto de "cargando" pero solo me funciona correctamente en firefox mientras que en el resto de navegadores no me funciona.

Al iniciar $(document).ready auto-añado una class al body que muestra un efecto de cargando, justo despúes ejecuto varias funciones por ajax (async: false, cache: false) y al después de las funciones quito la clase de cargando al body.

Esto funciona correctamente en Firefox pero no así en Chrome u otros navegadores y me gustaría saber cual es el motivo para poder solucionarlo.

Muchas gracias
  #2 (permalink)  
Antiguo 08/01/2015, 11:09
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Error con efecto "cargando" en algunos navegadores

pone el codigo resumido, para ver si te podemos dar una mano, asi es muy dificil
  #3 (permalink)  
Antiguo 08/01/2015, 11:35
Avatar de victor5atodogas  
Fecha de Ingreso: junio-2010
Mensajes: 447
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Error con efecto "cargando" en algunos navegadores

Ok no hay problema, os dejo el código de ejemplo:


Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.    
  3.     open_loading();
  4.        
  5.     load_calendario1();
  6.     load_calendario2();
  7.    
  8.     web_cargada = true;
  9.    
  10.     close_loading();    
  11. });
  12.  
  13. function load_calendario1()
  14. {
  15.     open_loading();
  16.    
  17.     $.ajax({
  18.         type: "POST",
  19.         url: url1,
  20.         async: false,
  21.         cache: false,
  22.         dataType : "json",
  23.         data: {
  24.             ajax: true,
  25.             action: "action"},
  26.         cache: false,
  27.         success: function(jsonData, textStatus, jqXHR)
  28.         {
  29.             jsonData = $.parseJSON(jsonData);
  30.             if(jsonData.errors==false)
  31.             {
  32.                
  33.             }
  34.             close_loading();
  35.         }
  36.     });
  37. }
  38.  
  39. function load_calendario2()
  40. {
  41.     open_loading();
  42.    
  43.     $.ajax({
  44.         type: "POST",
  45.         url: url1,
  46.         async: false,
  47.         cache: false,
  48.         dataType : "json",
  49.         data: {
  50.             ajax: true,
  51.             action: "action"},
  52.         cache: false,
  53.         success: function(jsonData, textStatus, jqXHR)
  54.         {
  55.             jsonData = $.parseJSON(jsonData);
  56.             if(jsonData.errors==false)
  57.             {
  58.                
  59.             }
  60.             close_loading();
  61.         }
  62.     });
  63. }  
  64.  
  65. function open_loading()
  66. {
  67.     $('body').addClass("loading");
  68. }
  69.  
  70. function close_loading()
  71. {
  72.     if(web_cargada==true)
  73.     {
  74.         $('body').removeClass("loading");        
  75.     }    
  76. }
  #4 (permalink)  
Antiguo 08/01/2015, 11:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Error con efecto "cargando" en algunos navegadores

Te aconsejo utilizar los métodos ajaxStart y ajaxStop, así se ejecutaría el efecto de carga para todas las peticiones asíncronas.

Código Javascript:
Ver original
  1. $(document).ajaxStart(function(){
  2.     $('body').addClass("loading");
  3. }).ajaxStop(function(){
  4.     $('body').removeClass("loading");
  5. });

No sé qué efecto añadirá tu clase loading; lo que yo hago es mostrar/ocultar un GIF de carga y, pues, nunca he tenido problemas con ningún navegador.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 08/01/2015, 11:59
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Error con efecto "cargando" en algunos navegadores

Una boludes, pero a mi me paso una vez, proba de colocar las funciones arriba de todo, ej:

Código Javascript:
Ver original
  1. function load_calendario1()
  2. {
  3.     open_loading();
  4.    
  5.     $.ajax({
  6.         type: "POST",
  7.         url: url1,
  8.         async: false,
  9.         cache: false,
  10.         dataType : "json",
  11.         data: {
  12.             ajax: true,
  13.             action: "action"},
  14.         cache: false,
  15.         success: function(jsonData, textStatus, jqXHR)
  16.         {
  17.             jsonData = $.parseJSON(jsonData);
  18.             if(jsonData.errors==false)
  19.             {
  20.                
  21.             }
  22.             close_loading();
  23.         }
  24.     });
  25. }
  26.  
  27. function load_calendario2()
  28. {
  29.     open_loading();
  30.    
  31.     $.ajax({
  32.         type: "POST",
  33.         url: url1,
  34.         async: false,
  35.         cache: false,
  36.         dataType : "json",
  37.         data: {
  38.             ajax: true,
  39.             action: "action"},
  40.         cache: false,
  41.         success: function(jsonData, textStatus, jqXHR)
  42.         {
  43.             jsonData = $.parseJSON(jsonData);
  44.             if(jsonData.errors==false)
  45.             {
  46.                
  47.             }
  48.             close_loading();
  49.         }
  50.     });
  51. }  
  52.  
  53. function open_loading()
  54. {
  55.     $('body').addClass("loading");
  56. }
  57.  
  58. function close_loading()
  59. {
  60.     if(web_cargada==true)
  61.     {
  62.         $('body').removeClass("loading");        
  63.     }    
  64. }
  65.  
  66. $(document).ready(function() {
  67.    
  68.     open_loading();
  69.        
  70.     load_calendario1();
  71.     load_calendario2();
  72.    
  73.     web_cargada = true;
  74.    
  75.     close_loading();    
  76. });
  #6 (permalink)  
Antiguo 08/01/2015, 14:15
Avatar de victor5atodogas  
Fecha de Ingreso: junio-2010
Mensajes: 447
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Error con efecto "cargando" en algunos navegadores

Muchas gracias a los dos, usaré ambas opciones y os digo al respecto.
  #7 (permalink)  
Antiguo 08/01/2015, 15:13
Avatar de victor5atodogas  
Fecha de Ingreso: junio-2010
Mensajes: 447
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Error con efecto "cargando" en algunos navegadores

Lo he probado de las 2 formas que me habéis comentado y en todas me sigue sin funcionar.

Aclaro que el open_loading añade con css una especie de gif de "cargando".
  #8 (permalink)  
Antiguo 08/01/2015, 21:44
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Error con efecto "cargando" en algunos navegadores

¿Podrías mostrarnos el código actualizado con las recomendaciones que te hemos dado?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 09/01/2015, 02:18
Avatar de victor5atodogas  
Fecha de Ingreso: junio-2010
Mensajes: 447
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Error con efecto "cargando" en algunos navegadores

He colocado los dos ejemplos por separado:


Código Javascript:
Ver original
  1. function load_calendario1()
  2. {
  3.     open_loading();
  4.    
  5.     $.ajax({
  6.         type: "POST",
  7.         url: url1,
  8.         async: false,
  9.         cache: false,
  10.         dataType : "json",
  11.         data: {
  12.             ajax: true,
  13.             action: "action"},
  14.         cache: false,
  15.         success: function(jsonData, textStatus, jqXHR)
  16.         {
  17.             jsonData = $.parseJSON(jsonData);
  18.             if(jsonData.errors==false)
  19.             {
  20.                
  21.             }
  22.             close_loading();
  23.         }
  24.     });
  25. }
  26.  
  27. function load_calendario2()
  28. {
  29.     open_loading();
  30.    
  31.     $.ajax({
  32.         type: "POST",
  33.         url: url1,
  34.         async: false,
  35.         cache: false,
  36.         dataType : "json",
  37.         data: {
  38.             ajax: true,
  39.             action: "action"},
  40.         cache: false,
  41.         success: function(jsonData, textStatus, jqXHR)
  42.         {
  43.             jsonData = $.parseJSON(jsonData);
  44.             if(jsonData.errors==false)
  45.             {
  46.                
  47.             }
  48.             close_loading();
  49.         }
  50.     });
  51. }  
  52.  
  53. function open_loading()
  54. {
  55.     $('body').addClass("loading");
  56. }
  57.  
  58. function close_loading()
  59. {
  60.     if(web_cargada==true)
  61.     {
  62.         $('body').removeClass("loading");        
  63.     }    
  64. }
  65.  
  66. $(document).ready(function() {
  67.    
  68.     open_loading();
  69.        
  70.     load_calendario1();
  71.     load_calendario2();
  72.    
  73.     web_cargada = true;
  74.    
  75.     close_loading();    
  76. });

y el otro ejemplo:

Código Javascript:
Ver original
  1. function load_calendario1()
  2. {
  3.     open_loading();
  4.    
  5.     $.ajax({
  6.         type: "POST",
  7.         url: url1,
  8.         async: false,
  9.         cache: false,
  10.         dataType : "json",
  11.         data: {
  12.             ajax: true,
  13.             action: "action"},
  14.         cache: false,
  15.         success: function(jsonData, textStatus, jqXHR)
  16.         {
  17.             jsonData = $.parseJSON(jsonData);
  18.             if(jsonData.errors==false)
  19.             {
  20.                
  21.             }
  22.             close_loading();
  23.         }
  24.     });
  25. }
  26.  
  27. function load_calendario2()
  28. {
  29.     open_loading();
  30.    
  31.     $.ajax({
  32.         type: "POST",
  33.         url: url1,
  34.         async: false,
  35.         cache: false,
  36.         dataType : "json",
  37.         data: {
  38.             ajax: true,
  39.             action: "action"},
  40.         cache: false,
  41.         success: function(jsonData, textStatus, jqXHR)
  42.         {
  43.             jsonData = $.parseJSON(jsonData);
  44.             if(jsonData.errors==false)
  45.             {
  46.                
  47.             }
  48.             close_loading();
  49.         }
  50.     });
  51. }  
  52.  
  53. function open_loading()
  54. {
  55.     $('body').addClass("loading");
  56. }
  57.  
  58. function close_loading()
  59. {
  60.     if(web_cargada==true)
  61.     {
  62.         $('body').removeClass("loading");        
  63.     }    
  64. }
  65.  
  66. $(document).ajaxStart(function(){
  67.     open_loading();
  68. }).ajaxStop(function(){
  69.     web_cargada = true;    
  70.     close_loading();    
  71. });
  72.  
  73. $(document).ready(function() {
  74.    
  75.     load_calendario1();
  76.     load_calendario2();
  77. });

Funcionar sigue funcionando todo correctamente pero el cargando sigue sin salir en Chrome.
  #10 (permalink)  
Antiguo 09/01/2015, 08:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Error con efecto "cargando" en algunos navegadores

Pienso que si tus funciones son de una o dos líneas, podrías ejecutarlas directamente en los métodos.

Código Javascript:
Ver original
  1. function load_calendario(url)
  2. {    
  3.     $.ajax({
  4.         type: "POST",
  5.         url: url,
  6.         async: false,
  7.         cache: false,
  8.         dataType : "json",
  9.         data: {
  10.             ajax: true,
  11.             action: "action"},
  12.         success: function(jsonData, textStatus, jqXHR)
  13.         {
  14.             jsonData = $.parseJSON(jsonData);
  15.             if(jsonData.errors==false){}
  16.         }
  17.     });
  18. }
  19.  
  20. $(document).ready(function() {
  21.     load_calendario("url1.php");
  22.     load_calendario("url2.php");
  23. });
  24.  
  25. $(document).ajaxStart(function(){ //Se ejecuta al iniciar la petición asíncrona (Ajax)
  26.     $('body').addClass("loading");
  27. }).ajaxStop(function(){ //Se ejecuta al terminar la petición asíncrona (Ajax)
  28.     $('body').removeClass("loading");    
  29. });

Simplifiqué un poco las funciones ya que noté que hacen exactamente lo mismo. Además, como los métodos que te recomendé usar hacen lo mismo que tus funciones 'open_loading' y 'close_loading', las quité y lo dejé solo con los métodos para quitar lo redundante.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 10/01/2015, 07:12
Avatar de victor5atodogas  
Fecha de Ingreso: junio-2010
Mensajes: 447
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Error con efecto "cargando" en algunos navegadores

Al colocar el ajaxStar y ajaxStop al final del tood he logrado que salga en Chrome, pero sale muy poco y en algunas ocasiones no sale, te paso el link de la web por privado y así podrás ver a que me refiero.

Etiquetas: cargando, chrome, efecto
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 11:33.