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)请求不能是全局的。