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