Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Problema con Ajax y Jquery al cargar HTML asíncrono.

Estas en el tema de Problema con Ajax y Jquery al cargar HTML asíncrono. en el foro de Jquery en Foros del Web. Hola!! (Soy principiante con Ajax/Jquery) Os resumo, tengo desarrollado mi propio CMS y ahora lo estoy pasando todo a procesos con Ajax y Jquery para ...
  #1 (permalink)  
Antiguo 15/09/2014, 04:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Problema con Ajax y Jquery al cargar HTML asíncrono.

Hola!!

(Soy principiante con Ajax/Jquery)

Os resumo, tengo desarrollado mi propio CMS y ahora lo estoy pasando todo a procesos con Ajax y Jquery para evitar las dichosas recargas de páginas.

Lo que quiero hacer:

En el CMS quiero mostrar la tabla de registros y el formulario para modificar/añadir registros

Tengo:

Siempre dos ficheros:

- admin_noticias.asp
- admin_noticias_ajax.asp

El primero se encarga del html, jquery y css y el segundo de los procesos (crear registros, borrarlos, crear la tabla paginada...).

Uso el plugin easyResponsiveTabs para crear pestaña en infinidad de partes de la Web, son responsives, os recomiendo el plugin

El problema:

Cuando cargo una página, doy formato a las lengüetas, en el Head tenemos:

Código HTML:
Ver original
  1. <script type="text/javascript" src="js/easyResponsiveTabs.js"></script>
  2.         <link rel="stylesheet" href="css/easy-responsive-tabs.css"/>
  3.         <script>
  4.             $(document).ready(function() {
  5.                 $('#tabsjquery1, #tabsjquery2').easyResponsiveTabs({          
  6.                     type: 'default', //Types: default, vertical, accordion          
  7.                     width: 'auto', //auto or any width like 600px
  8.                     fit: true,   // 100% fit in a container
  9.                     closed: 'accordion', // Start closed if in accordion view
  10.                     activate: function(event) {  }// Callback function if tab is switched                            
  11.                 });
  12.             });
  13.         </script>

Y en el html esta estructura:

Código HTML:
Ver original
  1. <div id="tabsjquery1">
  2.  
  3.     <ul class="resp-tabs-list">
  4.         <li></li>
  5.         <li></li>
  6.         <li></li>
  7.     </ul>
  8.  
  9.     <div class="resp-tabs-container">
  10.         <div></div>
  11.         <div></div>
  12.         <div></div>
  13.     </div>
  14.  
  15. </div>

El problema viene después de ejecutar ajax y que me devuelva el html, no coge el formato.

Cuando hago click en la tabla para editar un registro, se ejecuta esto:

Código HTML:
Ver original
  1.             function edit_registro(id){
  2.                 //hay que pasarle la carpeta y el nombre del fichero
  3.                 //y a través de opción saber si recargar fotos noticia o fotos de galería.
  4.                 event.preventDefault();
  5.                 muestra_oculta('form_registro');
  6.                 respuesta_ajax('admin_noticias_ajax.asp', '?proceso=editregistro&id=' + id, 'form_registro');
  7.                 $('#tabsjquery1').easyResponsiveTabs(
  8.                     {
  9.                         type: 'default', //Types: default, vertical, accordion          
  10.                         width: 'auto', //auto or any width like 600px
  11.                         fit: true,   // 100% fit in a container
  12.                         closed: 'accordion', // Start closed if in accordion view
  13.                         activate: function(event) {  }// Callback function if tab is switched                            
  14.                     });
  15.             }
  16.         </script>

RespuestaAjax, devuelte un html equivalente a la estructura de tabsjquery1 y con varios formularios por dentro para editar la noticia, sus fotos, etc.

Al devolverlo, no coge el formato de easyResponsiveTabs
  #2 (permalink)  
Antiguo 15/09/2014, 04:49
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

Código Javascript:
Ver original
  1. <script>
  2.             function edit_registro(id){
  3.                 //hay que pasarle la carpeta y el nombre del fichero
  4.                 //y a través de opción saber si recargar fotos noticia o fotos de galería.
  5.                 event.preventDefault();
  6.                 muestra_oculta('form_registro');
  7.                 respuesta_ajax('admin_noticias_ajax.asp', '?proceso=editregistro&id=' + id, 'form_registro');
  8.                 $(document).ready(function() {
  9.                     $('#tabsjquery1').easyResponsiveTabs(
  10.                         {
  11.                             type: 'default', //Types: default, vertical, accordion          
  12.                             width: 'auto', //auto or any width like 600px
  13.                             fit: true,   // 100% fit in a container
  14.                             closed: 'accordion', // Start closed if in accordion view
  15.                             activate: function(event) {  }// Callback function if tab is switched                            
  16.                         });
  17.                 });
  18.             }
  19.         </script>

He probado también así y nada, supongo que será por el DOM, no sé como hacerlo, me echáis una mano?
  #3 (permalink)  
Antiguo 15/09/2014, 04:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

¿Los tiros irían por aquí?

http://www.desarrolloweb.com/articul...es-jquery.html
  #4 (permalink)  
Antiguo 15/09/2014, 05:12
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

Así, tampoco.

Código Javascript:
Ver original
  1. <script>
  2.             function edit_registro(id){
  3.                 //hay que pasarle la carpeta y el nombre del fichero
  4.                 //y a través de opción saber si recargar fotos noticia o fotos de galería.
  5.                 event.preventDefault();
  6.                 muestra_oculta('form_registro');
  7.                 respuesta_ajax('admin_noticias_ajax.asp', '?proceso=editregistro&id=' + id, 'form_registro', function(){
  8.                     $('#tabsjquery1').easyResponsiveTabs(
  9.                         {
  10.                             type: 'default', //Types: default, vertical, accordion          
  11.                             width: 'auto', //auto or any width like 600px
  12.                             fit: true,   // 100% fit in a container
  13.                             closed: 'accordion', // Start closed if in accordion view
  14.                             activate: function(event) {  }// Callback function if tab is switched                            
  15.                         });
  16.                 });
  17.             }
  18.         </script>
  #5 (permalink)  
Antiguo 15/09/2014, 07:11
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

Buenas pablo, lo tenes online al sitio? para poder reproducir el error
  #6 (permalink)  
Antiguo 16/09/2014, 00:44
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

que va, pertenece al CMS y hay que logarse, tengo una Web en demo, si quieres te creo un usuario administrador y me echas un cable

El CMS es español de elaboración propia y nos es necesario pasar ya a Ajax para evitar las recargar y poder separar al 100% el código del html, CSS y js

Si quieres me mandas un correo a [email protected] y te creo una cuenta

Te pongo la función, creo que falta añadirle algo para callback, pero claro, no siempre que la use necesitaré hacer esa llamada:

Código Javascript:
Ver original
  1. <script>
  2.             //Función que devuelve una respuesta ajax de un Script Asp
  3.             //se le pasa:
  4.             //la página ASP, los parámetros en formato Get y el ID
  5.             //donde se tiene que volcar la respuesta
  6.             //formato de los parámetros:
  7.             //pagina: procesos.asp
  8.             //cadena: ?proceso=1
  9.             //idrespuesta: divcontenedor
  10.             function respuesta_ajax(pagina, cadena, idrespuesta, micallback){
  11.                     $.ajax({
  12.                             cache: false,
  13.                             url:   pagina + cadena,
  14.                             type:  'post',
  15.                             success:  function (response) {
  16.                                     $("#"+idrespuesta).html(response);
  17.                             }
  18.                     });
  19.             }
  20.         </script>
  #7 (permalink)  
Antiguo 16/09/2014, 00:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

También uso esta función para mostrar los div ocultos:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.             function muestra_oculta(id) {
  3.             //compruebo si el elemto esta oculto o no
  4.                if($('#'+id).is(':hidden')) {
  5.                    $('#'+id).show('slow');
  6.                }else {// de lo contrario lo oculto
  7.                    $('#'+id).hide('slow');
  8.                }
  9.             }
  10.         </script>
  #8 (permalink)  
Antiguo 16/09/2014, 02:22
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

He localizado el problema, pero no la solución, no se puede acceder directamente a nodos creados dinámicamente con Jquery:

http://programacionwebmix.wordpress....om-con-jquery/

y he hecho una chapuza que funciona para demostrar el problema, he modificado la función:

Código Javascript:
Ver original
  1. <script>
  2.             function edit_registro(id){
  3.                 //hay que pasarle la carpeta y el nombre del fichero
  4.                 //y a través de opción saber si recargar fotos noticia o fotos de galería.
  5.                 event.preventDefault();
  6.                 muestra_oculta('form_registro');
  7.                 respuesta_ajax('admin_noticias_ajax.asp', '?proceso=editregistro&id=' + id, 'form_registro');
  8.                
  9.                 $('#form_registro').on('click',function(){
  10.                     $('#tabsjquery1').easyResponsiveTabs
  11.                     ({
  12.                         type: 'default', //Types: default, vertical, accordion          
  13.                         width: 'auto', //auto or any width like 600px
  14.                         fit: true,   // 100% fit in a container
  15.                         closed: 'accordion', // Start closed if in accordion view
  16.                         activate: function(event) {  }// Callback function if tab is switched                            
  17.                     }) 
  18.                
  19.                
  20.                 });
  21.                
  22.                
  23.                
  24.             }
  25.         </script>

El formulario me lo carga sin el formato correcto a las lengüetas y cuando hago click en el id form_registros, TACHAAAAN!!, me aplica el formato de easyResponsiveTabs

si cambio el click, por el hold no funciona.
  #9 (permalink)  
Antiguo 16/09/2014, 03:13
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

He leído esto:

http://www.forosdelweb.com/f179/even...jquery-600121/

y esto:

http://www.arumeinformatica.es/blog/...dinamicamente/

He modificado la función así y tampoco funciona

Código Javascript:
Ver original
  1. <script>
  2.             function edit_registro(id){
  3.                 //hay que pasarle la carpeta y el nombre del fichero
  4.                 //y a través de opción saber si recargar fotos noticia o fotos de galería.
  5.                 event.preventDefault();
  6.                 muestra_oculta('form_registro');
  7.                 respuesta_ajax('admin_noticias_ajax.asp', '?proceso=editregistro&id=' + id, 'form_registro');
  8.                
  9.                 $('#form_registro').find('#form_registro div').easyResponsiveTabs
  10.                     ({
  11.                         type: 'default', //Types: default, vertical, accordion          
  12.                         width: 'auto', //auto or any width like 600px
  13.                         fit: true,   // 100% fit in a container
  14.                         closed: 'accordion', // Start closed if in accordion view
  15.                         activate: function(event) {  }// Callback function if tab is switched                            
  16.                     });
  17.             }
  18.         </script>
  #10 (permalink)  
Antiguo 16/09/2014, 03:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

No he puesto el html resultante que es éste:

Código HTML:
Ver original
  1. <div class="div_subcontenido_g div_hidden" id="form_registro" style="display: block;">
  2.  
  3. <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  4.  
  5.  
  6.  
  7.     <a onclick="muestra_oculta('form_registro')"><img title="Cerrar" alt="Cerrar" src="images_sys.css4/ico24_close.png"></a>
  8.  
  9.     <div id="tabsjquery1">
  10.    
  11.         <ul class="resp-tabs-list">
  12.             <li>Ficha de la noticia</li>
  13.             <li>Fotos</li>
  14.             <li>Galería</li>
  15.         </ul>
  16.    
  17.         <div class="resp-tabs-container">
  18.             <div>
  19.                 <form class="formulario" method="post" action="admin_noticias.asp?proceso=updateregistro&amp;id=1161">
  20.                 <fieldset>
  21.                     <dl>
  22.                         <dt>Ficha de la noticia</dt>
  23.                         <dd>
  24.                         .
  25.                         .
  26.                         .
  27.                     </dl>
  28.                 </fieldset>
  29.                 </form>                            
  30.             </div>
  31.             <div>
  32.                 <dl class="lista_dl">
  33.                     <dd>
  34.                         <form id="upload" method="post" action="upload.asp?dir=fotosno&amp;max=3&amp;tipo=1&amp;cod=1161&amp;ancho=1024&amp;marcaagua=1" enctype="multipart/form-data">
  35.                             .
  36.                             .
  37.                             .                          
  38.                         </form>
  39.                     </dd>
  40.                 </dl>
  41.                    
  42.                 <div id="divimagenes" class="flex_row_wrap"></div>
  43.             </div>
  44.             <div>
  45.                 <dl class="lista_dl">
  46.                     <dd>
  47.                         <form id="upload2" method="post" action="upload.asp?dir=fotosno&amp;max=100&amp;tipo=1&amp;cod=g1161&amp;ancho=1024&amp;marcaagua=1" enctype="multipart/form-data">
  48.                         .
  49.                         .
  50.                         .                          
  51.                         </form>
  52.                     </dd>
  53.                 </dl>
  54.                 <div id="divimagenes2" class="flex_row_wrap flex_row_wrap_10"></div>
  55.             </div>
  56.         </div>
  57.     </div>
  58.    
  59.                                                    
  60.     </div>

Si os fijáis, hay otra cosa que no queda bien, aunque no me da errores, ajax me devuelve html, pero siempre incluye:
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  #11 (permalink)  
Antiguo 17/09/2014, 01:01
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Problema con Ajax y Jquery al cargar HTML asíncrono.

Solucionado gracias a diurno10:

Primero en la function edit_registro quita todo esto

Código:
$('#form_registro').on('click',function(){
   $('#tabsjquery1').easyResponsiveTabs
       ({
         type: 'default', 
         width: 'auto', 
         fit: true,   
         closed: 'accordion', 
         activate: function(event) {  }/        
     })  
});
e incluso el event.preventDefault(); el cual veo q lo utilizas en muchos lugares pero nunca obtenes el objeto event y eso te da
error en varios navegadores.


luego en admin_noticias_ajax.asp

quitas el tag meta que tiene <meta content="text/html; charset=utf-8" http-equiv="Content-Type">, por que es en bano y luego pones
esto

Código:
<script>
 $(document).ready(function() {
   $('#tabsjquery1').easyResponsiveTabs(
      {
      type: 'default',            
      width: 'auto', 
      fit: true,
      closed: 'accordion', 
     activate: function(event) {  }          
   });
});
</script>
no es necesario q lo coloques dentro de tags head, ponelo ni bien comienza el archivo.

Referente al campo meta, admin_noticias_ajax.asp no contiene estructura html. es decir, ninguna etiqueta de html básica, ni head ni body ni nada, tan sólo hay código ASP y el sript que diurno10 me ha dicho que incluya, lo cual funciona, genial!!

Muchas gracias!!

Etiquetas: Ninguno
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 14:07.