【发布时间】:2014-03-14 19:11:38
【问题描述】:
我有一个将一些 HTML 加载到 DOM 中的 ajax 调用。如果调用成功,我会显示一个旋转的加载 gif,当调用完成时,我会隐藏它。代码:
$.ajax({
url: someUrl,
type: 'POST',
dataType: 'json',
data: someData,
success: function(response){
$(myLoadingGif).show(); // Show the loading gif
$(myContainer).html(response);
},
complete: function(){
$(myLoadingGif).hide(); // Hide the loading gif. Note: HTML has not been added yet
}
});
问题是:加载 gif 在添加 HTML 之前几秒钟就隐藏了,即使我在 ajax 调用的完整部分中声明了它。我希望它始终可见。而且我不想仅仅为了延迟它而做一个丑陋的 1000 毫秒的 setTimeout() 。我可能会补充一点,加载的 HTML 块相当大。这是一个有 20-40 行的表格。
关于如何确保 gif 在实际添加 HTML 之前保持可见的任何想法?
【问题讨论】:
-
首先,您不应该在成功时显示加载 GIF,而是在发出请求之前显示。 Complete 将在 Success 后几毫秒调用
-
你试过把
$(myLoadingGif).hide();直接放在$(myContainer).html(response);下面吗?或者您可以检查$(myContainer)元素中的高度或元素数量是否发生变化。 -
如果数据太多,我怀疑UI的重绘需要太多时间。您可以尝试强制重绘:
$(myContainer).hide().html(response).show(0,function(){$(myLoadingGif).hide(100);});
标签: javascript jquery ajax