Javascript 在ajaxOncomplete之后触发ajax调用会导致无限循环
我定义了一个通用的ajaxComplete函数,在每个ajax请求之后触发,如下所示Javascript 在ajaxOncomplete之后触发ajax调用会导致无限循环,javascript,jquery,ajax,jsf,primefaces,Javascript,Jquery,Ajax,Jsf,Primefaces,我定义了一个通用的ajaxComplete函数,在每个ajax请求之后触发,如下所示 $(document).on('pfAjaxComplete', function(event, xhr, options) { doStuff(); }); 注:我使用pfAjaxComplete而不是ajaxComplete在PrimeFaces下工作 现在,在每个ajaxcomplete上调用“doStuff()”函数。问题是,在“doStuff()”函数中,我触发了几个基于PrimeFace
$(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'}
]
});
}
一个快速的解决方案是在您不希望执行其他操作的调用中附加额外的参数 如果你选择了一个在目标页面上没有使用的“参数表”,它不会在意它
$(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'}
]
});
}
一个快速的解决方案是在您不希望执行其他操作的调用中附加额外的参数 如果你选择了一个在目标页面上没有使用的“参数表”,它不会在意它
$(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'}
]
});
}
一个快速的解决方案是在您不希望执行其他操作的调用中附加额外的参数 如果你选择了一个在目标页面上没有使用的“参数表”,它不会在意它
$(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'}
]
});
}
最终使其工作,解决方案类似于@dognose one,在我的情况下,我必须使用处理的数据primefaces,这种方式
...
$.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',基本上是一个字符串,包含与请求相关的信息,包括参数,所以如果参数存在,不要做任何事情。最终使它起作用,解决方案类似于@dognose one,在我的情况下,我必须使用处理过的数据素面,这种方式
...
$.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',基本上是一个字符串,包含与请求相关的信息,包括参数,所以如果参数存在,不要做任何事情。最终使它起作用,解决方案类似于@dognose one,在我的情况下,我必须使用处理过的数据素面,这种方式
...
$.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',基本上是一个字符串,包含与请求相关的信息,包括参数,所以如果参数存在,不要做任何事情。最终使它起作用,解决方案类似于@dognose one,在我的情况下,我必须使用处理过的数据素面,这种方式
...
$.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',基本上是一个字符串,包含与请求相关的信息,包括参数,因此如果参数存在,不要做任何事情。是否执行
newAjaxCallback
调用dostuf()
;在调用doStuff之前,检查完整的事件是否为XYZ类型?@Jack否,只是尝试创建一个支持bean操作方法。。。但这是另一个ajax调用,所以loops@epascarello的确,但我一直很难解决这个问题:)newAjaxCallback调用doStuff()
?好吧;在调用doStuff之前,检查完整的事件是否为XYZ类型?@Jack否,只是尝试创建一个支持bean操作方法。。。但这是另一个ajax调用,所以loops@epascarello的确,但我一直很难解决这个问题:)newAjaxCallback调用doStuff()
?好吧;在调用doStuff之前,检查完整的事件是否为XYZ类型?@Jack否,只是尝试创建一个支持bean操作方法。。。但这是另一个ajax调用,所以loops@epascarello的确,但我一直很难解决这个问题:)newAjaxCallback调用doStuff()
?好吧;在调用doStuff之前,检查完整的事件是否为XYZ类型?@Jack否,只是尝试创建一个支持bean操作方法。。。但这是另一个ajax调用,所以loops@epascarello的确,但我一直很难解决这个问题:)