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

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

看起来你有一个竞争条件,也许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

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