Interceptar error javascript para refresco de página

Buenas tardes a todos. Comento una situación que estamos teniendo en la Universidad.
Para poder intentar mejorar el tema de saturación de recursos y errores durante las inscripciones a cursadas, se ha decidido implementar el uso de un producto de colas virtuales. Estamos realizando pruebas y todo funciona OK, ya que el alumno, al querer ingresar a 3w, es interceptado por la app, y debe esperar su turno.
Al salir beneficiado, se loguea, ingresa a un 3w en el cual puede acceder a unas pocas operaciones, entre las cuales se encuentra la inscripción a cursadas. La app de la fila virtual se configuró para que al cabo de unos 10 minutos de sesión TOTAL, el alumno vuelva a hacer la fila.

Formalmente, mediante pruebas, pudimos corroborar que funcionalmente todo anda perfecto. AL llegar a los 10 minutos, el alumno deja de tener acceso a 3w. El problema es que la experiencia del usuario no es muy buena, ya que al hacer click en las diferentes opciones de 3w, el sistema empieza a devolverle errores de javascripts mencionando problemas al intentar abrir las urls, pero no es reenviado automáticamente a la fila, hasta que no se refresca TODA la página, mediante un f5 u otro método manual.

La pregunta es si alguien ha tenido alguna experiencia similar, y si les parece posible poder interceptar los errores de javascripts de los que se muestran en la captura de la pantalla que se adjunta, para poder obligar a un refresco de pantalla para que la app de colas virtuales pueda volver a tomar el control y el alumno vuelva a la fila.

Cualquier ayuda al respecto, aunque sea algún tip de como podría realizarse, es mas que bienvenido.

Muchas gracias y muy buena semana para todos!!!

Pablo

Ir a la issue

Hola @pgzavalla

¿que versión de Guaraní tenes instalada?

Yo pruebo cerrando sesión en otra pestaña o eliminando las cookies, pero al querer navegar me lleva al login sin errores.

Contame bien los pasos que estas haciendo para que de ese error.

Saludos.

En caso de Guardar en la operación Mis datos personales ocurre un problema que se queda Cargando… y hace muchos AJAXs que devuelven lo siguiente:

{"cod":"-2","cont":{"url":"http:\/\/siu:8286\/siu\/guarani\/3w\/acceso\/login?ref=http%3A%2F%2Fsiu%3A8286%2Fsiu%2Fguarani%2F3w%2Fdatos_censales%2Fguardar%2Fdomicilio","tiene_mensaje":""}}

¿seria ese su caso?

Saludos.

Veo que el error es cargando un recurso de uca.queue-it.net, ¿están usando la librería Queue.it?

Hola, Leo. Muchas gracias por la respuesta!!!
Te comento que la versión que estamos usando es la 3.21.2. Implementamos queue it como queue manager. Es el producto que comentaba.
El alumno ingresa al sitio de 3w, se inscribe y a los 10 minutos, queue it intenta tomar el control nuevamente para sacarlo de guarani y que vuelva a la fila. EL tema es que hasta que no se refresca 3w, no vuelve a queue it, pero queue it intenta llevarlo y ahí creo que es el error. SI luego del error, se hace un f5 en el browser, queue it toma el control. EL tema es, intentar interceptar el error 500 de javascript, y en ese caso refrescar la página.
Estamos intentando que se cargue un javascript que controle esto en todas las vistas, y no encontramos por donde exactamente. Por supuesto que quizás no sea la solución la que estamos pensando.
Seguimos intentando y aviso por acá, y si hubiera algún dato que deberíamos tener en cuenta o por donde encararlo, es bienvenido.
Abrazo!!!

Pablo

@pgzavalla

¿ Queue.it cierra la sesión del alumno?
¿en tal caso esta usando la función kernel::login_manager()->logout(); como se hace en accion__logout de src/siu/operaciones/acceso/controlador.php?

EL tema es que hasta que no se refresca 3w, no vuelve a queue it, pero queue it intenta llevarlo y ahí creo que es el error.

¿me podes ajuntar los logs de Autogestión en ese momento?

Saludos.

  1. The visitor is given a signed token and is redirected to a page on your website using a standard HTTP 302 redirect.

¿la sesión se mantiene abierta pero lo redirige donde estaba con un 302?
¿tenes un ambiente de testing para probarlo?

Saludos.

Hola, Leonel. Queue it no cierra sesión en 3w, solo redirecciona todo lo que vaya al sitio que controla (url de 3w) hacia una página de la fila, pero cuando hay un refresco.
Es correcto lo que mencionás, hasta donde entiendo. No tenemos acceso al código de queue it para cerrar la sesión de 3w lamentablemente.
Todo esto es en testing, tranqui. Solo que tenemos pocos días para resolverlo y pasarlo a producción. Igual, funcionar, funciona, solo que no es muy estético que el alumno empiece a ver errores de javascript sin pocer hacer nada hasta que refresque la página.
No tengo en este momento el log a mano, espero poder tener uno mañana en otra prueba que realicemos.
Abrazo!!!

Pablo

Perfecto @pgzavalla

En los errores que veo en la consola del navegador observo que el primero es porque no puede cargar un recurso, el segundo parece ser que el servidor devolvió un 500, pero no se si es Autogestión que devuelve dicho 500 o el servidor de Queue.it.

Saludos.

Hola, Leonel. Tal como te comentaba, paso lo que hicimos para resolver el tema. Quizás un poco desprolijo en cuanto a los lugares donde se ha modificado, pero al haber funcionado, no creo que, al menos por el momento, lo hagamos en otro lado, aunque por supuesto que estamos atentos a las sugerencias que nos hagan.

Primero agregamos un archivo src/siu/www/js/plugin_reloader.js (entendemos que podría agregarse en la carpeta pers, pero como decía antes, por el momento lo dejaremos aquí). El código de este archivo es:

(function ($) {
console.log(“Loading QIT Reloader.”);

$(document).ajaxError(function (event, jqxhr, settings, thrownError) {
	console.log("AJAX Error detected.")
	// Check for network error
	if (jqxhr.status === 0) {
		// This could be a CORS error or a general network error
		console.error("Network error or CORS error detected, reloading page.");
		location.reload();
	}
});

})(jQuery);

Luego, en los archivos
vendor/siu/chulupi-framework/src/SIU/Chulupi/interfaz/templates/kernel/template_base.twig
framework/src/SIU/Chulupi/interfaz/templates/kernel/contenido_barra_lateral.twig
framework/src/SIU/Chulupi/interfaz/templates/kernel/barra_lateral_dos_columnas.twig

se agrega la linea luego de la linea {% endif %}:

Esto hace que, si bien se muestra fugazmente el error, luego se refresca la página y toma el contro queue it.

Los cambios se realizaron para las clases bases para que luego sean tomados en la totalidad de 3w, pero entendemos que esto puede ser un pequeño gran problema para poder mantenerlo.

Muchas gracias por todo y quedamos atentos a comentarios.

Pablo

Hola @pgzavalla

Estas tocando código del SIU y de Chulupí, yo haría lo siguiente:

  1. Agrego el JS en src/pers/uner/www/js/plugin_reloader.js.

  2. Si lo queres tener siempre cargado el JS personalizas en src/pers/uner/extension_kernel/pagina.php:

<?php
namespace uner\extension_kernel;
use SIU\Chulupi\kernel;
class pagina extends \siu\extension_kernel\pagina
{
    protected function get_contexto_template()
    {
		$contexto = parent::get_contexto_template();
		$contexto['url_plugin_reloader'] = kernel::vinculador()->vinculo_js_por_personalizacion('plugin_reloader', 'uner');
		return $contexto;
    }
}
  1. Lo agregas en src/pers/uner/operaciones/_comun/templates/res.twig, vas a tener que copiarte todo de src/siu/operaciones/_comun/templates/res.twig y agregar:
<script type='text/javascript' src='{{ url_plugin_reloader }}' charset="{{encoding}}"></script>

$(document).ajaxError esta deprecado como podes ver acá, úsalo así. Creo que entra cuando las respuesta del AJAX viene en 500, ¿pasa eso? ¿registra algo en consola?

Saludos.

Hola, Leonel!!! Disculpas por la gran demora en responder. Pasaba que lo que funcionaba como lo habíámos hecho, no queríamos tocar nada durante las inscripciones. Ahora que todo pasó, seguí tus recomendaciones, y todo parece funcionar de la misma manera, más allá que no podemos probar exactamente el mismo escenario, ya que no tenemos contratada en este momento la cola virtual. Pero por las pruebas que hicimos rapidamente, funciona.

Paso a continuación el código modificado de plugin_reloader.js, cambiando el .ajaxError ya en el lugar correcto (carpeta pers). Admás, volvimos obviamente todo lo que habíamos modificado en chulupi y en carpeta de src/siu, a lo original:

/*
Script para recargar la pagina cuando se genera un error en una llamada AJAX
la ubicacion recomendada de este archivo es:

src/siu/www/js/plugin_reloader.js

Para el funcionamiento se debe incluir este script en los siguientes templates del framwework Chulupi

- template_base
- contenido_barra_lateral
- barra_lateral_dos_columnas	

<script type='text/javascript' src='https://test.materias.uca.edu.ar/materias/js/plugin_reloader.js'></script>

*/
(function ($) {
console.log(“Loading QIT Reloader.”);

$( document ).on( "ajaxError", function (event, jqxhr, settings, thrownError) {
	console.log("AJAX Error detected.")
	// Check for network error
	if (jqxhr.status === 0) {
		// This could be a CORS error or a general network error
		console.error("Network error or CORS error detected, reloading page.");
		location.reload();
	}
});