在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调用的长度是可变的,具体取决于它必须获取的行数。
感谢任何帮助和/或建议。
答案 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
。
所以现在无论哪一个完成第一和第二,他们都能够检查对方的状态并适当地解雇。