ajax请求的五个步骤_监控整个页面,非AJAX,需要通知

ajax请求的五个步骤

ajax请求的五个步骤

最近,在JSF中开发新图表和图表“导出服务”时,我遇到了一个非常普遍的问题。 当您执行长时间运行的任务(操作)时,您希望在开始时显示状态“请稍候……”对话框,并在响应到达时最后关闭此对话框。 对于AJAX请求,这不是问题,但对于将一些二进制内容流式传输到浏览器的非AJAX请求而言,则是有问题的。 为了解决此问题,我们可以使用与PrimeFaces中的FileDownload组件相同的技术。 我们可以设置一个特殊的cookie作为响应,并在客户端定期检查此cookie(如果已设置)。 设置此Cookie后,我们可以关闭打开的对话框。 可以在JSF中将cookie设置为:

// set cookie to be able to ask it and close status dialog for example
FacesContext.getCurrentInstance().getExternalContext().addResponseCookie(
             "cookie.chart.exporting", "true", Collections.<String, Object>emptyMap());

Non AJAX按钮执行一个JavaScript函数,即monitorExporting,它具有两个参数,这些参数代表在请求/响应生命周期的开始和结束时要调用的另一个JavaScript函数。

<p:commandButton value="Export to PNG" ajax="false" action="#{combiChartController.exportToPng}"
             onclick="monitorExporting(start, stop)"/>

PrimeFaces已经提供了一些方法来检查是否启用了cookie,以获取和删除它们。 所以,我们可以写

function monitorExporting(start, complete) {
    if(PrimeFaces.cookiesEnabled()) {
        if(start) {
           start();
        }

        window.chartExportingMonitor = setInterval(function() {
            var exportingComplete = PrimeFaces.getCookie('cookie.chart.exporting');

            if(exportingComplete === 'true') {
                if(complete) {
                    complete();
                }

                clearInterval(window.chartExportingMonitor);
                PrimeFaces.setCookie('cookie.chart.exporting', null);
            }
        }, 150);
    }
}

使用setInterval(…)定期询问cookie。 功能开始显示“请稍候……”对话框,功能停止将其关闭。

<script type="text/javascript">
/* <![CDATA[ */
    function start() {
        statusDialog.show();
    }

    function stop() {
        statusDialog.hide();
    }
/* ]]> */
</script>

如果禁用了cookie,则当然不会显示任何内容,但是通常很少见。

翻译自: https://www.javacodegeeks.com/2013/07/monitor-full-page-non-ajax-requests-to-be-notified.html

ajax请求的五个步骤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值