gpt4 book ai didi

javascript - ajaxOncomplete后触发ajax调用会导致无限循环

转载 作者:行者123 更新时间:2023-11-28 19:06:20 25 4
gpt4 key购买 nike

我定义了一个通用的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 调用?谢谢!

最佳答案

一个快速的解决方案是将附加参数附加到您不希望执行其他操作的调用中。

如果你选择的“参数”没有在目标页面上使用,它不会关心它。

$(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/

关于javascript - ajaxOncomplete后触发ajax调用会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31595448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com