Primefaces:所有ajax请求的默认oncomplete方法

我正在尝试为所有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'; } }); 

任何帮助,将不胜感激

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但只有旧版本..希望有人发现这有用。

我设法通过包装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); }; 

在primefaces中有组件ajaxStatus ,您可以将其用于此目的。 阅读文档以查看有关它的更多详细信息,但对于您的用例,它可能是这样的:

  

并且您可以按原样使用JavaScript函数:

 function ajaxStatusHandler(xhr, status, args) { // your code ... } 

注意:此方法只能用于全局AJAX请求(在PrimeFaces中是默认的),而且,据我所知,跨域脚本或JSONP (带填充的JSON)请求不能是全局的。