【问题标题】:Alternatives to setTimeout after an Ajax callbackAjax 回调后 setTimeout 的替代方法
【发布时间】:2010-10-22 01:28:46
【问题描述】:

我发现自己经常这样做:

window.onload = function(){

   $.get("http://example.com/example.html", function(data) {
       $('#contentHere').html(data);

       setTimeout("javaScriptClass.init()", 200);
   });

}

但是 setTimeout 似乎有点 hacky(而且 200 毫秒已经是普通用户注意力的三倍多:)。最好的选择是什么?

编辑

javaScriptClass.init() 作用于 ajax 调用中加载的 DOM 对象

【问题讨论】:

  • 为什么会有延迟?
  • @尼克! javaScriptClass.init() 作用于 ajax 调用中加载的 DOM 对象
  • 它们将在.html()调用之前的行之后立即加载,这是一个同步操作。
  • @Nick 我在javaScriptClass.init()setTimeout("javaScriptClass.init()", 200); 之间来回切换并得到不同的结果。随着延迟它的工作和没有它没有。那我应该重新提出这个问题吗?
  • 您是否在内容中加载图像,并且需要这些图像?这是我能想象到的唯一不完全同步的场景。

标签: javascript jquery ajax settimeout


【解决方案1】:

我认为这里的负载有些混乱,您可以这样做:

window.onload = function(){    
   $.get("http://example.com/example.html", function(data) {
       $('#contentHere').html(data);
       javaScriptClass.init();
   });    
}

$('#contentHere').html(data); 之后,DOM 元素就可以使用了。另请查看.load() 的附件(以防其他 onload 处理程序可能需要附加),如下所示:

$(window).load(function(){    
   $.get("http://example.com/example.html", function(data) {
       $('#contentHere').html(data);
       javaScriptClass.init();
   });    
});

不过,除非您在等待图像,否则可以在 document.ready 处理程序中调用它并更快地触发,从而获得更好的用户体验。

【讨论】:

  • 谢谢尼克。我很困惑,但这显然是正确的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2011-05-17
  • 2013-07-07
相关资源
最近更新 更多