【发布时间】:2015-10-14 05:39:53
【问题描述】:
我已经定义了一个通用的 ajaxComplete 函数,在每个 ajax 请求之后触发如下;
$(document).on('pfAjaxComplete', function(event, xhr, options) {
doStuff();
});
注意我使用 pfAjaxComplete 而不是 ajaxComplete 在 PrimeFaces 下工作
现在,在每个 ajaxcomplete 上都会调用“doStuff()”函数。问题是在“doStuff()”函数中,我触发了几个基于 PrimeFaces remoteCommand 执行的 ajax 调用
function doStuff() {
var elements = $('#wrapper').find("[id*='elements']");
if (elements !== null && elements .length > 0) {
$.each(elements , function(index) {
newAjaxCallBack([{name: 'param', value: 'val'}]);
});
}
}
我的远程命令
<p:remoteCommand name="newAjaxCallBack" actionListener="#{backingBean.action}" />
这工作正常,正在调用支持 bean 操作方法。问题是“doStuff”上的新 ajax 回调触发了一个新的 ajaxOnComplete 事件,这当然是有道理的,但它让我陷入了无限循环。曾试图解决它,但找不到任何解决方案。
有什么想法或建议吗?有没有办法在 newAjaxCallBack 上发送一个参数,然后在 ajaxComplete 函数上检测它以避免 doStuff 调用?谢谢!
【问题讨论】:
-
newAjaxCallback是否调用doStuff()? -
在调用 doStuff 之前不应该检查完整的事件是否是类型 XYZ?
-
@Jack 不,只是触发一个支持 bean 操作方法......但这被视为另一个 ajax 调用,所以它循环
-
@epascarello 确实,但我很难解决这个问题:)
标签: javascript jquery ajax jsf primefaces