为什么用layer.close('loading')关不掉layer.load产生的

提问 未结 4 4952
白板
白板 2017-4-3
悬赏:5飞吻
var index;
$.ajax({
type: "GET",
url: server + "api/home",
dataType: "json",
timeout: 3000, //超时时间设置,单位毫秒

beforeSend: function() {
index = layer.load(0, { shadow: true });
},
success: function(data) {
layer.close(index);
foo();
};
error: function() {
layer.close(index);
};
});
从服务器的数据获取来以后,还在一直转圈没关掉。foo()也执行了。
如果把layer.close(index); 改成 setTimeout(function(){layer.close(index);},1000);就可以,但是这样得拖延1秒。
回帖
  • 根据你的代码,个人觉得可能是页面产生了多次ajax请求,全局的index已经被覆盖了,你后面那个setTimeout的方法生效并不一定是index对了,而是时间到了,才执行的。
    以上只是个人想法。
    我建议:将关闭loading的方法改用closeAll('loading'),并且放在ajax请求的complete方法里面,就只用写一次了,不用在success和error两个地方都放closeAll。
    0 回复
  • 白板
    2017-4-4
    @麦康科技 后来发现这是BUG,最新的版本解决了这个BUG。 请求返回的速度太快,关闭的弹窗的时候弹窗还没有初始化完毕。所以才会在1秒延迟以后才可以关闭。
    0 回复
  • 白板
    2017-4-4
    @麦康科技 一开始关闭操作我也是放在complete里的,但是complete是最后才执行的,如果再success里再新加一个加载框,也会被误关掉的。
    0 回复
  • @白板 哦,我以为代码本身就是放在layer.ready里面的。layer 3.0.2 的版本里面好像作者想取消这个ready功能,但是不行,我原来发过帖子问这个事情,后来发现不行,如果是在页面load时就要进行ajax请求,那样loading的弹出框确实有问题(还有样式问题)。现在3.0.3貌似又取消了,还是建议放在ready里面。
    0 回复
本帖已设置禁止回复