Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Recargar o no recargar con javascript

Estas en el tema de Recargar o no recargar con javascript en el foro de Javascript en Foros del Web. Hola, Estoy haciendo un pequeño sistema de ticketing y, en su página inicial, quiero incluir un select que permita ver una tabla de los tickets: ...
  #1 (permalink)  
Antiguo 27/10/2013, 17:20
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Recargar o no recargar con javascript

Hola,
Estoy haciendo un pequeño sistema de ticketing y, en su página inicial, quiero incluir un select que permita ver una tabla de los tickets:
-Asignados al grupo del usuario
-Creados por el usuario
-Creados por cualquier usuario del grupo del usuario
Es algo como lo que ya tienen otras herramientas profesionales. Hasta ahora estaba usando JavaScript y Ajax para que, onchange en mano, no fuera necesario pinchar en ningún "submit" y tampoco fuera necesario recargar la página. Lo de tener que recargarla o no me da igual para el proyecto. El problema viene en que, al recargar la página, sea cual sea el objeto de la página que quiera enviar al servidor no consigo actualizar la página (todo o parte) bien.
Me explico algo mejor, con unos <div> tengo separada la pantalla en:
-Barra de título (arriba)
-Bloque Opciones/Enlaces (a la izquierda)
-Resto de la pantalla
Con el código que tengo (el que está mal y quiero corregir sin saber aún cómo), cuando salta el onChange se recarga toda la pantalla (título, bloque y resto) en el espacio que hay para el resto. Este es el código:
Código PHP:
Ver original
  1. <form name="ticketViews" id="ticketViews" action="">
  2.     <select name="optionsUnfold" id="optionsUnfold" onchange="handleTicketViews(this.form)">
  3.         <option value="1">Asignados a mi grupo</option>
  4.         <option value="2">Creados por mi</option>
  5.         <option value="3">Creados por mi grupo</option>
  6.     </select>      
  7. </form>

Código Javascript:
Ver original
  1. function handleTicketViews(){
  2.     userList = document.getElementById("optionsUnfold");
  3.     userValue = userList.options[userList.selectedIndex].value;
  4.     url = "Tickets.php?handle="+userValue;
  5.     view.open("GET", url, true);
  6.     view.onreadystatechange = viewResponse;
  7.     view.send(null);
  8. }
  9.  
  10. function viewResponse(){
  11.     if(view.readyState == 4){
  12.         if(view.status == 200){
  13.             document.getElementById("ticketViews").innerHTML = view.responseText;
  14.         }
  15.         else{
  16.             alert('Ha ocurrido un error: '+view.statusText);
  17.         }
  18.     }
  19. }

Igual me he empeñado en hacerlo en JavaScript sin tener por qué, cuando lo que realmente quiero es (lo explico en modo bruto):
1.Detectar que el usuario ha seleccionado/cambiado una opción sin tener que apretar botón alguno (ni de hacer nada más)
2.Capturar el valor/texto (mejor el valor) de la selección
3.En base a la selección volver a mostrar la misma página, pero con el contenido de la tabla arriba indicada actualizado
Claro está, en base a la selección hecha por el usuario voy a hacer una query MySQL u otra para extraer dichos datos.

¿Veis donde estoy metiendo la pata? ¿Lo haríais de otra manera?
Gracias por anticipado.
  #2 (permalink)  
Antiguo 29/10/2013, 12:46
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Recargar o no recargar con javascript

buenas...
seguramente sucede que no estás imprimiendo solo la porción necesaria al recibir la respuesta de la consulta. es decir, la respuesta de la consulta es una página completa con todas sus secciones y no solo el contenido de interes. la forma correcta de hacerlo lo dejo en debate, aunque en lo personal prefiero solo devolver el contenido necesario. tienes múltiples opciones, pero básicamente se pueden reducir a dos categorias: ajax o método tradicional, pero en ambos casos puedes lograr efectos muy parecidos.

generalmente el método tradicional consiste en realizar un submit del formulario y dejar que todo el contenido se vuelva a recargar con los nuevos datos. éste método no requiere javascript, salvo si vas hacer auto-submit al cambiar una opción. otra posibilidad es hacer un submit a una ventana adicional (generalmente un iframe) y con javascript extraer el contenido de interés desde la ventana adicional a la principal. éste método es muy similar a ajax, solo que el método de transporte lo hace una ventana.

con ajax, puedes hacer lo mismo como el método tradicional. tal como lo tienes, luce más como la primera opción dando la percepción de recargar toda la página. no obstante, el método preferible con ajax es solo actualizar una porción de la página. esto se puede hacer de dos formas. si la consulta al servidor genera una página completa, entonces tienes que extraer con javascript solo la porción de interés.

para ambas metodología (tradicional y ajax), puedes tener un documento adicional en el servidor que se encargue de solo generar el contenido de interés para el formulario en particular. obviamente, en el caso del método tradicional, la consulta tendría que enviarse a otra ventana y luego traer el contenido a la página principal. el documento adicional no es obligatorio, también puedes "detectar" en el servidor si la consulta realizada viene de una petición ajax agregandole un parámetro adicional, por ejemplo ajax=true. acorde a este parámetro generas el contenido parcial o completo.

hay más opciones, quizas un web services que devuelva JSON pueda ser una alternativa. como ves, es cuestión gusto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 02/11/2013, 10:24
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Recargar o no recargar con javascript

Zerokilled,
Lo hice según el método tradicional y va de lujo. No sabes cómo te lo agradezco.
A seguir peleando

Etiquetas: ajax, html, php
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 16:01.