Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ajaxOncomplete之后触发ajax调用会导致无限循环_Javascript_Jquery_Ajax_Jsf_Primefaces - Fatal编程技术网

Javascript 在ajaxOncomplete之后触发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

我定义了一个通用的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'}
        ]
     });
}

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

如果你选择了一个在目标页面上没有使用的“参数表”,它不会在意它

$(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的确,但我一直很难解决这个问题:)