3

我需要处理全局 ajax 响应。当我只想在没有任何参数的情况下调用正常的 javascript 操作时,一切正常,开箱即用。比我可以使用 p:ajaxStatus 控件,并且应用程序以正确的方式运行。

我现在真正需要做的是处理在 ajax 请求期间有 externalContext.redirect() 调用的情况。它在应用程序中只发生在一个地方,但它是从许多地方调用的。我在想,我可以例如在 RequestContext 中添加回调参数。但是我怎样才能在 javascript 中访问这个参数呢?

在 firebug 中观看时,我可以看到 callbackParam 在 json 响应中返回,但是如何在 javascript 中访问该值?

4

2 回答 2

5

它已被添加为默认args对象的属性,可在oncomplete上下文中使用。

所以,例如

RequestContext.getCurrentInstance().addCallbackParam("foo", "bar");

可作为

oncomplete="console.log(args.foo)"

也可以看看:


更新:根据评论,结果在<p:ajaxStatus>. 我建议将它作为一个错误报告给 PF 家伙,参数在<p:ajaxStatus oncomplete>. <h:outputScript target="head">同时,您可以使用在内部加载的以下脚本来解决它<h:body>(以确保它在PrimeFaces 脚本之后加载):

var originalPrimeFacesAjaxUtilsSend = PrimeFaces.ajax.AjaxUtils.send;
PrimeFaces.ajax.AjaxUtils.send = function(cfg) {
    var originalOncomplete = cfg.oncomplete;
    cfg.oncomplete = function() {
        ajaxStatusOncomplete.apply(this, arguments);

        if (originalOncomplete) {
            originalOncomplete.apply(this, arguments);
        }
    };
    originalPrimeFacesAjaxUtilsSend.apply(this, arguments);
};

function ajaxStatusOncomplete(xhr, status, args) {
    // Do your thing here.
}
于 2013-07-26T12:30:21.560 回答
0

在 p:ajaxStatus 参数中可通过 PrimeFaces.ajax.Queue.xhrs 例如:

oncomplete="console.log(PrimeFaces.ajax.Queue.xhrs[0].pArgs.foo)"
于 2019-06-14T07:14:02.463 回答