ajax调用后Fancybox没有关闭

时间:2013-03-28 17:19:43

标签: javascript jquery ajax fancybox

在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调用的长度是可变的,具体取决于它必须获取的行数。

感谢任何帮助和/或建议。

1 个答案:

答案 0 :(得分:2)

看起来你有一个竞争条件,也许fancybox没有完成创建,并且当你的AJAX调用试图触发该关闭函数时,还没有定义它的close函数。

我推荐一个触发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 Stop相同但设置fancyboxDone = true而不是ajaxStop

所以现在无论哪一个完成第一和第二,他们都能够检查对方的状态并适当地解雇。