我正在尝试为所有ajax请求配置一个oncomplete方法,以便我可以处理会话超时。
我尝试添加以下脚本,但它与为p:ajax元素设置oncomplete属性的方式不同。每次发出Ajax请求时都不会执行。
$.ajaxSetup({method: post,
complete: function(xhr, status, args){
var xdoc = xhr.responseXML;
if(xdoc == null){
return;
}
errorNodes = xdoc.getElementsByTagName('error-name');
if (errorNodes.length == 0) {
return;
}
errorName = errorNodes[0].childNodes[0].nodeValue;
errorValueNode = xmlDoc.getElementsByTagName('error-message');
errorValue = errorValueNode[0].childNodes[0].nodeValue;
alert(errorValue);
document.location.href='${pageContext.request.contextPath}/login/login.jsf';
}
});
任何帮助将不胜感激
答案 0 :(得分:6)
PrimeFaces更新的版本(在这里使用PF 5)
var originalPrimeFacesAjaxUtilsSend = PrimeFaces.ajax.Request.send;
PrimeFaces.ajax.Request.send = function(cfg) {
if (!cfg.oncomplete) {
cfg.oncomplete = doYourStuff;
}
originalPrimeFacesAjaxUtilsSend.apply(this, arguments);
};
只是为了保持它在某处,试图找到stackoverflow但只有旧版本.. 希望有人觉得这很有用。
答案 1 :(得分:5)
我设法通过包装Primefaces AjaxUtils方法来实现它。
var originalPrimeFacesAjaxUtilsSend = PrimeFaces.ajax.AjaxUtils.send;
PrimeFaces.ajax.AjaxUtils.send = function(cfg) {
if (!cfg.oncomplete) {
// register default handler
cfg.oncomplete = oncompleteDefaultHandler;
}
originalPrimeFacesAjaxUtilsSend.apply(this, arguments);
};
答案 2 :(得分:2)
在primefaces中有组件ajaxStatus
,您可以将其用于此目的。阅读文档以查看有关它的更多详细信息,但对于您的用例,它可以是这样的:
<p:ajaxStatus oncomplete="ajaxStatusHandler(xhr, status, args)"/>
您可以按原样使用JavaScript函数:
function ajaxStatusHandler(xhr, status, args) {
// your code ...
}
注意:此方法只能用于全局AJAX请求(在PrimeFaces中是默认的),而且,据我所知,跨域脚本或JSONP(带填充的JSON)请求不能是全局的