首页 > 解决方案 > jQuery unblockUI() 由 ajax 重定向触发

问题描述

我有一个带有进程属性的图标,因此当我单击该图标时,会触发 ajax 提交。

现在,只要图标的动作正在运行,我就想用 jQuery 的blockUI()功能阻止页面。它在常规提交(没有 ajax)时工作得非常好,但是在 ajax 提交时页面只会被阻塞很短的时间,因此在第一次提交完成之前进行第二次提交是错误的。

我分析了 Firefox 中的网络流量并注意到以下几点:

在常规提交(没有 ajax)中,POST 方法的答案是“ 302 Found”,而在 ajax 提交中执行重定向,所以这里的答案是“ 200 OK”,并带有 answer message <partial-response><redirect url="myURL"></redirect></partial-response>

我调试并意识到在某些时候我最终会在 PrimeFaces 的core.js文件中使用PrimeFaces.ajax.ResponseProcessor.doRedirect(a);再次调用window.location.assign(b.getAttribute('url')).

有了这个分配,blockUI就丢失了。

我的问题:我该怎么做才能blockUI在 ajax 重定向中不丢失?

我在我的 xhtml 文件中使用以下代码:

<p:ajaxStatus onstart="onGlobalAjaxStart()" oncomplete="onGlobalAjaxComplete()" />

该函数onGlobalAjaxStart()执行以下操作:

$.blockUI.defaults.overlayCSS = {};
let message = $('#blockUI').attr('pt:message'); // gets the text for the blockUI message
$.blockUI({ message: message});

函数onGlobalAjaxStart()调用$.unblockUI()(除其他外)。

标签: javascriptjqueryajaxblockuijquery-blockui

解决方案


推荐阅读