在ajaxOncomplete之后触发ajax调用会导致无限循环
Triggering ajax calls after ajaxOncomplete causes infinite loop
我定义了一个通用的ajaxComplete函数,在每个ajax请求之后触发,如下所示;
$(document).on('pfAjaxComplete', function(event, xhr, options) {
doStuff();
});
注意我使用pfAjaxComplete而不是ajaxComplete来在PrimeFaces下工作
现在,在每个ajaxcomplete上'doStuff()'函数正在被调用。问题是,在'doStuff()'函数中,我触发了几个ajax调用,以基于PrimeFaces remoteCommand
执行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操作方法。问题是新的ajax回调'doStuff'触发一个新的ajaxOnComplete事件,这当然是有意义的,但它让我在一个无限循环。我曾试图解决这个问题,但找不到任何解决办法。
有什么想法或建议吗?是否有一种方法可以在newAjaxCallBack上发送一个参数,然后在ajaxComplete函数上检测它,以避免doStuff调用?谢谢!
一个快速的解决方案是在你不希望执行其他操作的调用中附加额外的参数。
如果您选择的"参数"没有在目标页面上使用,则它不会关心它。
$(document).ajaxComplete(function(event, xhr, options) {
if (options.url.indexOf("noStuff=true") != -1){
alert("Ignoring Ajax Request from noStuff");
return;
}
doStuff();
});
function doStuff(){
alert("doing stuff");
//another fake ajax request
$.ajax({
url: "http://google.de",
data: [
{name: 'param', value: 'val'},
{name: 'noStuff', value: 'true'}
]
});
}
http://jsfiddle.net/3kwhn0kx/最终得到了它的工作,解决方案类似于@dognose一个,在我的情况下,我不得不使用数据的主面处理,这样;
...
$.each(elements , function(index) {
newAjaxCallBack([{name: 'dontcall', value: 'true'}]);
});
...
然后:
$(document).on('pfAjaxComplete', function(event, xhr, options) {
if (xhr.pfSettings.data.indexOf('dontcall') !== -1) {
return;
}
doStuff();
});
正如你所看到的,我使用的是pfSettings对象,它有一个属性'data',基本上是一个字符串,包含与请求相关的信息,包括参数,所以如果参数存在,不要做任何事情。
相关文章:
- 使用滚动溢出-x进行无限循环
- 从index.html调用函数,该函数无限循环
- 等待循环调用的所有承诺完成
- 使用jQuery无限循环播放HTML页面幻灯片
- Grunt任务没有加载,获得无限循环
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- MeteorJS使用流星调用和流星方法时的无限循环
- AngularJS内部的调用函数进入无限循环
- 在 Jquery 或 Javascript 中调用方法的无限循环的正确方法是什么?
- ng-禁用函数调用在 ng-repeat 下处于无限循环中
- 在UI路由器中调用子状态时触发了无限循环
- document.ready用angular.js以无限循环调用
- 为什么我的Angular函数在无限循环中被调用?
- Angular JS的http拦截器async调用无限循环
- 是否有一种方法来确定ajax调用是否在无限循环中执行
- 为什么为同一函数调用window.setTimeout不会引入无限循环
- 在ajaxOncomplete之后触发ajax调用会导致无限循环
- 在回调函数中调用 onSubmit 会导致无限循环
- 用Angular表达式绑定Ajax调用的无限循环
- 调用$watchCollection时的angular$digest无限循环