【问题标题】:After using ajax to change element, how to detect if the new content has been fully loaded?使用ajax更改元素后,如何检测新内容是否已满载?
【发布时间】:2015-08-15 12:02:50
【问题描述】:
<div class="content">Some original Text<img src="someImage"></div>

$.ajax('someAjaxUrl', function(data){
    $('content').html(data);
})

我正在使用与上面类似的一些代码从服务器获取内容并将其显示在内容区域中。实际内容包含大量的图片和文字,所以在ajax请求完成并更改了HTML之后,仍然需要一些时间来渲染所有的图片。当所有新内容(包括图像)都已完全加载时,我正在尝试捕获该事件:

$.ajax('someAjaxUrl', function(data){
    $('content').html(data);
    $('content')[0].addEventListener('load',function(){
      // Do something
    })
})

但这似乎不起作用。这可能吗?

【问题讨论】:

  • 如果你能接受我的回答,假设它对你有用,那就太好了。我现在要去睡觉了,因为我现在已经很晚了。如果下次我来的时候你还在苦苦挣扎,我会告诉你任何其他可能的解决方案。
  • 认为这个线程在这里处理同样的问题:stackoverflow.com/questions/1658216/…
  • 你试过.ajaxStop吗? api.jquery.com/ajaxStop?
  • 这对您不起作用吗?

标签: jquery ajax


【解决方案1】:

是的。如果你运行:

$(document).ready(function(){
// AJAX, etc in here ...
});

当文档加载完毕后,您可以在函数内执行任何操作。

编辑:

如果您在页面加载后运行 AJAX,您可以将它们放入如下内容:

<div id="loaded" style="display: none">
<img src""/>
<p>Whatever you want in here.</p>
<img src""/>
<img src""/>
<img src""/>
</div>

然后在你的 jQuery 中:

$('#loaded img').load(function(){
$('#loaded').show()
});

【讨论】:

  • 把它放在你的 AJAX 请求中,“加载”的 div 只会在图像加载后显示。
  • 您实际上是在阻止用户看到图像的加载,它们会在加载时显示。
  • 对不起,我将loaded定义为一个类。已编辑。
  • 在此页面api.jquery.com/load-event 上显示“加载”事件“可以停止为已经存在于浏览器缓存中的图像触发”。这有点难以测试,但我想知道如果用户来回点击,那么会有一些图像已经在缓存中,这将使“加载”事件停止触发。这是有问题的,因为我将隐藏新内容直到“加载”事件触发,有什么解决方案吗?
  • 当用户加载页面时,最理想的结果是什么?我以为我们只是在阻止用户看到图像的渲染?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
相关资源
最近更新 更多