Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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
jQuery Ajax已完成,但未完成此功能_Jquery - Fatal编程技术网

jQuery Ajax已完成,但未完成此功能

jQuery Ajax已完成,但未完成此功能,jquery,Jquery,我有以下代码: $(document).ajaxComplete(function () { tips(); }); 当ajax事件完成时,它将再次运行tips函数!然而,tips函数也包含ajax请求,所以它会调用自己,这不是我想要做的 当ajax事件完成时,我如何运行tips,除非是tips ajax请求编辑 不要使用我的解决方案。使用下面mmcnickle中的一个。 在您的tips()中功能您可以设置bool标志吗?类似于 var isTips = false; functi

我有以下代码:

$(document).ajaxComplete(function () {
    tips();
});
当ajax事件完成时,它将再次运行tips函数!然而,tips函数也包含ajax请求,所以它会调用自己,这不是我想要做的

当ajax事件完成时,我如何运行tips,除非是tips ajax请求

编辑

不要使用我的解决方案。使用下面mmcnickle中的一个。


在您的
tips()中功能您可以设置bool标志吗?类似于

var isTips = false;

function tips(callBack){
   isTips = true;
   // rest of your code
   if(typeOf(callBack) == 'function'){
      callBack();
   }
}

$(document).ajaxComplete(function(){
   if(!isTips){
      tips(function(){
         isTips = false;
      });
   }
});

可以设置
ajaxComplete()
的回调函数来接收有关ajax请求的详细信息。然后,您可以在进行ajax调用时传入一个特殊设置,该设置允许您判断何时应该调用或不应该调用tips函数:

function tips() {
    var settings = {
        is_tips_call: true
    };

    $.ajax('#', settings);

    alert("In tips");
}

$(document).ajaxComplete(function(event, xhr, settings) {

    if ('is_tips_call' in settings && settings.is_tips_call == true) {
        // Do nothing
        return;
    }

    tips();

});

我已经为这个做了一个准备,这样你就可以看到它的实际效果。这比公认的答案更可取,详情请参见我的评论。

或者只是将提示创建为一个函数。提示是一个函数,你的意思是什么?此解决方案可能会导致一些非常奇怪的行为,并可能是一些难以跟踪的错误的来源。a)
isTips
标志永远不会再次设置为
false
,因此在第一次调用
tips()
之后,您的
ajaxComplete()
回调将不再适用于任何其他ajax调用,无论它们是否由
tips()
调用。b) 在设置
isTips
标志和再次将其设置为false之间完成的Ajax请求将无法触发回调。请参阅我的答案,以获得一个解决方案,该解决方案允许检查每个请求是否调用
tips()
。我原以为他能够自己解决这个问题。使用我的解决方案,您可以在调用
tips()后将isTips设置回false
ajaxComplete
功能中。否,需要检查每个请求,以确保所有非tips调用都被实际捕获。因为这些是异步调用,所以您不能确定在设置
isTips=true
isTips=false
之间不会有回调。如果在这段时间内有任何回调被解雇,你就错过了。该死的,你是对的-这是一个优雅的解决方案。我讨厌犯错,但我要承认我错了:)