首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“等待,加载,然后显示”内容的更好方法

“等待,加载,然后显示”内容的更好方法
EN

Stack Overflow用户
提问于 2013-04-12 20:53:33
回答 3查看 989关注 0票数 1

我有一个在单击时通过$.load()方法填充的div。然后,我将此div作为弹出窗口附加到body中(有点像模式弹出窗口)。每次单击时,div的内容都会更改。

问题所在

碰巧整个填充机制大约需要1.5到2秒。如果我只点击一次就没有问题。但如果我再次单击,div会弹出旧内容,然后在接下来的500毫秒内加载新内容。这样用户就可以看到我想要避免的新旧内容。

我尝试过的

(1)首先想到的是使用setTimeout()函数在2秒后运行。

代码语言:javascript
复制
$('div#temp').load('somepage.php');
setTimeout(function(){
   html = $('div#temp').html();
}, 2000);
$('div#popup').html(html).appendTo('body');

这样做是可行的,但并不可靠。不能保证新内容将在2秒内加载。这也可能需要3秒或更长的时间。硬编码一个超过2秒的值也不好,因为它看起来像是永恒。

(2)我尝试的下一件事是通过使用以下代码来使用while循环:

代码语言:javascript
复制
var html = '';
$('div#temp').load('somepage.php');
html = $('div#temp').html();
while(html == '')
{
  html = $('div#temp').html();
}
$('div#popup').html(html).appendTo('body');

最后,这是可行的,但由于某种原因,它在弹出div之前会使浏览器挂起8-10秒

因此,很明显,这两种选择都有一些缺点。我希望有其他我不知道的方法解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-12 20:57:26

我建议你只在内容加载后才弹出div:

代码语言:javascript
复制
$.get('somepage.php', function(data) {
   $('div#popup').html(data).appendTo('body');
});
票数 1
EN

Stack Overflow用户

发布于 2013-04-12 21:00:34

您尝试过使用$.load的完整回调吗?

.load( url [, data ] [, complete(responseText, textStatus, XMLHttpRequest) ] )

代码语言:javascript
复制
$('div#temp').load('somepage.php',function(responseText){
     $('div#popup').html(responseText).appendTo('body');
 });

如果旧内容仍然在新内容之前显示,您可以先隐藏旧内容。那么您就不需要临时div来存储数据了。

代码语言:javascript
复制
$('div#popup').fadeOut(function(){
     $('div#popup').load('somepage.php',function(){
     $(this).fadeIn();
 });
});
票数 2
EN

Stack Overflow用户

发布于 2013-04-12 20:59:57

听起来您只需要删除弹出div中的内容(并可能添加一个“正在加载...”消息),然后再开始AJAX调用。

另外,使用.load的完成回调参数触发对DOM的后续更新。

代码语言:javascript
复制
$('#popup').html('loading...');
$.get('somepage.php', function(content) {
    $('#popup').html(content);
});

您永远不应该轮询DOM或以其他方式将JS解释器放入“忙循环”-这会使浏览器无响应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15971943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档