Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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 ajax调用后Fancybox未关闭_Javascript_Jquery_Ajax_Fancybox - Fatal编程技术网

Javascript ajax调用后Fancybox未关闭

Javascript ajax调用后Fancybox未关闭,javascript,jquery,ajax,fancybox,Javascript,Jquery,Ajax,Fancybox,在某些情况下,在一个ajax调用之后,我很难关闭我的花式盒子 $(document).ajaxStop(function() { function(){$.fancybox.close()}; }); $(document).ajaxStart(function() { $("a#load_gif").trigger('click'); }); 这是我处理这个奇特盒子的代码。因此,我的问题是,如果ajax调用非常简短和快速,框不会关闭,但是如果调用较长,框会自动关闭

在某些情况下,在一个ajax调用之后,我很难关闭我的花式盒子

 $(document).ajaxStop(function() {
    function(){$.fancybox.close()};
 });

 $(document).ajaxStart(function() {
    $("a#load_gif").trigger('click');
 });
这是我处理这个奇特盒子的代码。因此,我的问题是,如果ajax调用非常简短和快速,框不会关闭,但是如果调用较长,框会自动关闭

我找到了一个与此类似的解决方案

$(document).ajaxStop(function() {
    setTimeout(function(){$.fancybox.close()},500);
});
但老实说,这个解决方案并不好看。即使ajax调用返回得非常快,我还能做些什么来关闭这个奇特的盒子呢?ajax调用的长度是可变的,这取决于它必须获取的行数


非常感谢您的帮助和/或建议。

当您的AJAX调用试图触发关闭函数时,您似乎有一个竞争条件,并且可能fancybox尚未完成创建,并且尚未定义关闭函数

我建议采用两步流程触发fancybox关闭。创建2个全局变量
ajaxStop=false
fancyboxDone=false

创建如下函数:

function closeFancyBox(){
    if(ajaxStop && fancyboxDone){
        $.fancybox.close();
        ajaxStop = fancyboxDone = false;
    }
}
然后将ajax停止更改为:

 $(document).ajaxStop(function() {
    function(){
      ajaxStop = true;
      closeFancyBox()
    };
 });
最后,向您的fancybox添加一个onComplete函数,该函数与ajax停止功能相同,但设置
fancyboxDone=true
而不是
ajaxStop


因此,现在无论哪一个先结束,第二个结束,他们都可以检查对方的状态并适当地触发关闭。

您的功能就像魔术一样!它工作得很好。一个伟大而干净的修复。谢谢。“你的功能就像魔术一样!”-哈哈,到目前为止我得到的最好的回答。在发布这个问题之前,我已经搜索了很长时间,所以我很高兴看到一个像这个一样干净清晰的答案哈哈。