JavaScript - ¿Cómo evitar el refresco automático de la página?

 
Vista:

¿Cómo evitar el refresco automático de la página?

Publicado por Quique (7 intervenciones) el 09/11/2022 20:16:47
Hola

Tengo un formulario que al dar click realiza un proceso largo en el servidor, lo que provoca que antes de que el servidor de la respuesta, el navegador vuelva a solicitar la página. ¿Cómo puedo dar más tiempo de espera o cancelar el refresco automático?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

¿Cómo evitar el refresco automático de la página?

Publicado por Ivan (118 intervenciones) el 10/11/2022 09:43:53
Hola,

en stackoverflow hay un tema idéntico y bién solucionado con JavaScript.
Evita el botón submit del formulario que siempre recarga la página y haz el envío con un <button> y JavaScript.

https://es.stackoverflow.com/questions/71301/evitar-refresco-de-p%C3%A1gina-al-enviar-formulario

Hay un ejemplo práctico al final, espero te sirva.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo evitar el refresco automático de la página?

Publicado por Quique (7 intervenciones) el 10/11/2022 17:57:53
Casi no uso type="submit", la mayoría de mis botones son type="button", pero no solo me pasa con los botones, hago muchos envíos de formulario con onclick, onblur, e incluso con algunos onfocus en input, label e imágenes. Algo así (hasta ahorita me estoy dando cuenta de que estoy mandando basura en algunos hidde, pero bueno, este es mas o menos un ejemplo de una página, y comose ve en el form, no cambia la ventana, siempre lo manda a un iframe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<form action="/" method="POST" target="_qs_iframe" id="qs_3759220001" onsubmit="return false;" name="qs_form">
   <input type="hidden" id="_qs_o" name="o">
   <input type="hidden" id="_qs_e" name="e">
   <input type="hidden" id="_qs_v" name="v" value="3759220001">
   <input type="hidden" id="_qs_f" name="f">
    <center>
    <table>
      <tr valign="top">
           <td colspan="2">
              <input type="hidden" value="1-1" id="B3759220314" name="3759220314" onChange="return _qs_script.click(this,'change');" onDblClick="return _qs_script.click(this,'lDblClick');"><table>
                 <tr><th>Nombre/Razón Social</th></tr>
                 <tr id="B3759220314.1-1" onclick="_qs_script.tabla(this)" ondblclick="document.getElementById('B3759220314').ondblclick();"><td>TIENDA BASICA</td></tr>
                 <tr id="B3759220314.2-2" onclick="_qs_script.tabla(this)" ondblclick="document.getElementById('B3759220314').ondblclick();"><td>PANCHO LOPEZ</td></tr>
              <input type="hidden" value="1-1" id="B3759220204" name="3759220204" onDblClick="return _qs_script.click(this,'lDblClick');"></table>
           </td>
           <td>&nbsp&nbsp&nbsp</td><td>
           <td>
              <table>
                 <tr><th>Ejercicio</th>
                 </tr>
                 <tr id="B3759220204.1-1" onclick="_qs_script.tabla(this)" ondblclick="document.getElementById('B3759220204').ondblclick();">
                    <td>2022</td>
                 </tr>
                 <tr id="B3759220204.2-2" onclick="_qs_script.tabla(this)" ondblclick="document.getElementById('B3759220204').ondblclick();">
                    <td>2019</td>
                 </tr>
              </table>
           </td>
      </tr>
      <tr>
        <td><img src="img/ati/IconSys.ico" id="3759220313" name="3759220313" /></td>
        <td><label id="3759220317" name="3759220317" />CAS Admibien</label><br><label id="3759220418" name="3759220418" />© 2022,  derechos reservados.</label></td>
        <td></td>
        <td><input type="button" value="Aceptar" id="3759220419" name="3759220419" onClick="return _qs_script.click(this,'click');">
 <input type="reset" value="Salir" id="3759220420" name="3759220420" onClick="return _qs_script.click(this,'click');">
</td>
      </tr>
    </table>
    </center>
</form>
 
<script>
const _qs_script={
   .
   .
   .
click(oBoton,cEvento,event){
   .
   .
   .
   let form=oBoton.form;
   .
   .
   .
   form.submit();
   .
   .
   .
   return false;},
   .
   .
   .
}
</script>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

¿Cómo evitar el refresco automático de la página?

Publicado por Ivan (118 intervenciones) el 11/11/2022 08:51:23
Hola,

si descartamos el refresco que se produce con el botón submit, hay que partir de la base que una página web no se refresca por sí sola.

Para afectuar un "refresco" hay "algo" que lo ejecuta, desde apretar F5 por el usuario, un script, un reload, una etiqueta <meta> o incluso alguna configuración del propio navegador.

Si dices que haces muchos envios de formulario, parece lógico que alguno de los "receptores" quieran actualizar los datos con algún tipo de refresco de página, si encuentras ese "algo" que quiere actualizar la página podrás anular o retrasar el refresco.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo evitar el refresco automático de la página?

Publicado por Quique (7 intervenciones) el 11/11/2022 16:11:19
Creo que no me expliqué bien.

Todas mis páginas tienen dos formularios, uno oculto totalmente solo con 3 input=hidden, otro que es todo el cuerpo de la página, y dos iframes ocultos. Según lo que pique el usuario puede cualquiera de las siguientes dos opciones, pero siempre se procesan de la misma manera, ya sea un click, blur, etc, pasan por el método click de la manera que puse en el ejemplo del post anterior:

1. Hacer un llamado que sea cargado en el iframe 1, el cual recibe las instrucciones para refrescar la información de la página, todo esto generalmente es solo refresco de datos, no de página, aunque también puede borrar todo con un document.body.innerHTML o efectuar un llamado al formulario oculto, el cual refresca la página de la manera normall de cualquier formulario, ya sea en la mimsa ventana, o aquí es donde se puede abrir otra página, la cual tiene esta misma estructura.
2. Hace un llamado que sea cargado en el iframae 2, este proceso, hasta ahorita solamente se hace cuando se quiere imprimir algo sin que se vea previamente en la pantalla, se carga en el iframe y se da un print().

Ok, el problema es que cuando el usuario da click y se envía un form.submit() el navegador esta en espera de la respuesta del servidor, y sin tocar nada, si el proceso no da respuesa, despues de algunos segundos, la verdad no me he fijado cuantos, pero son como 30, vuelve a hacer la misma solicitud al servidor automáticamente, ese segundo llamado (o tercero, o cuarto, etc. si no se da respuesta) es el que quiero evitar o retrasar cuando sepa que el proceso tardará un poco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

¿Cómo evitar el refresco automático de la página?

Publicado por Ivan (118 intervenciones) el 12/11/2022 08:54:13
Hola,

si, creo que nos hemos confundido. Yo entendí que el problema era del lado del cliente, pero ahora veo que el problema viene del lado del servidor.

No se qué lenguaje utilizas para hacer esos procesos tan largos, pero por ejemplo PHP tiene una variable de configuración max_execution_time (normalmente establecida en 30 segundos) que es el tiempo máximo que puede estar procesando antes de enviar una respuesta. Lo que me extraña es que después suele lanzar un error y no mencionas nada de un error.

Tal vez en la configuración de tu server encuentres algo parecido.

Otra cosa que haría yo personalmente, es mirar de reducir el tiempo de esos procesos tan largos, seguro que se puede. Piensa que desde el punto de vista del usuario esperar tanto tiempo puede llevarle a pensar que algo va mal.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo evitar el refresco automático de la página?

Publicado por Quique (7 intervenciones) el 12/11/2022 18:05:32
Tienes razón, yo veía el problema del lado del cliente, y de hecho, lo sigo viendo, porque necesito que se espere. No utilizo del lado del servidor lenguaje para web por el momento, quizá más adelante, cambiemos a php, pero por lo pronto tengo un servidor web propietario, hecho en harbour y es algo así como un programa en windows que queremos que trabaje en web en lugar de ventanas. En ocaciones tenemos reportes tardados, por ejemplo en nominas o inventario. Eso tarda un poco y el navegador vuelve a refrescar, por eso necesito un poco más de tiempo para terminar.

Con lo que me dices, me doy cuenta de que si no se puede resolver por parte del cliente, tendré que ver la manera de resolverlo desde el servidor, aunque está complicado porque como en php, en mi servidor cada llamado es independiente.

De cualquier manera, si hubiera alguna manera de retrasar el refresco automático, sería mucho más fácil de resolver ;-)

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar