2

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

任何帮助和/或建议表示赞赏。

4

1 回答 1

2

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

我推荐一个触发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.

因此,现在无论哪个完成第一和第二,他们都将能够检查彼此的状态并适当地触发关闭。

于 2013-03-28T19:09:06.333 回答