我需要处理全局ajax响应。当我只想在没有任何参数的情况下调用正常的javascript操作时,一切正常,开箱即用。我可以使用p:ajaxStatus controll,并且应用程序的行为方式正确。
我现在需要做的是处理情况,在ajax请求期间有externalContext.redirect()调用。它只发生在应用程序的一个地方,但它是从很多地方调用的。 我在想,我可以在RequestContext中添加回调参数。但是如何在javascript中访问此参数?
在firebug中观看时,我可以看到在json响应中返回了callbackParam,但是如何在javascript中访问此值?
答案 0 :(得分: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.
}
答案 1 :(得分:0)
在p:ajaxStatus参数中可通过PrimeFaces.ajax.Queue.xhrs获得 例如:
oncomplete="console.log(PrimeFaces.ajax.Queue.xhrs[0].pArgs.foo)"