Tengo un ícono con un atributo de proceso, por lo que cuando hago clic en el ícono, se activa un envío ajax.
Ahora, mientras la acción del ícono se esté ejecutando, quiero bloquear la página con la función blockUI() de jQuery. Funciona perfectamente bien con los envíos regulares (sin ajax), pero en los envíos ajax, la página solo se bloquea durante un breve período de tiempo, por lo que es falsamente posible realizar un segundo envío antes de que finalice el primero.
Analicé el tráfico de red en Firefox y noté lo siguiente:
En un envío regular (sin ajax), la respuesta del método POST es " 302 Found ", mientras que en un envío ajax se realiza una redirección, por lo que la respuesta aquí es " 200 OK " con el mensaje de respuesta <partial-response><redirect url="myURL"></redirect></partial-response> .
Depuré y me di cuenta de que en algún momento termino en el archivo core.js de PrimeFaces con la función PrimeFaces.ajax.ResponseProcessor.doRedirect(a); que nuevamente llama a window.location.assign(b.getAttribute('url')) .
Con esta asignación, el blockUI se pierde.
Mi pregunta: ¿Qué puedo hacer para que blockUI no se pierda en una redirección ajax?
Estoy usando el siguiente código en mi archivo xhtml:
<p:ajaxStatus onstart="onGlobalAjaxStart()" oncomplete="onGlobalAjaxComplete()" />
La función onGlobalAjaxStart() hace lo siguiente:
$.blockUI.defaults.overlayCSS = {}; let message = $('#blockUI').attr('pt:message'); // gets the text for the blockUI message $.blockUI({ message: message}); La función onGlobalAjaxStart() llama a $.unblockUI() (entre otras).