Javascript ajax调用后Fancybox未关闭
在某些情况下,在一个ajax调用之后,我很难关闭我的花式盒子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调用非常简短和快速,框不会关闭,但是如果调用较长,框会自动关闭
$(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
因此,现在无论哪一个先结束,第二个结束,他们都可以检查对方的状态并适当地触发关闭。您的功能就像魔术一样!它工作得很好。一个伟大而干净的修复。谢谢。“你的功能就像魔术一样!”-哈哈,到目前为止我得到的最好的回答。在发布这个问题之前,我已经搜索了很长时间,所以我很高兴看到一个像这个一样干净清晰的答案哈哈。