在jQuery加载命令之后有一种强制等待的方法,直到html被渲染到div中?

时间:2012-06-26 11:18:20

标签: javascript jquery ajax

我(基本上)有这段代码 -

<script type="text/javascript" language="javascript">
    $(document).ready(function() {
        $("#loadDiv").load("mypage.html", function(){ alert($("#someText").text()) });
    });
</script>
<div id="loadDiv"></div>

然而,警报将显示&#34; undefined&#34;因为html还没有被渲染到div中。

我已经看到了这个问题 - How to wait for jQuery's load function to render loaded content before executing callback function - 杰克的答案对我的情况最好。在我的实际页面上,我有八个这样的,并且延迟两秒仍然有一些在渲染html之前运行。

有没有人比延迟愚蠢时间有更好的建议?

3 个答案:

答案 0 :(得分:1)

您应该能够使用setTimeout()将回复包裹在0的回调中(浏览器意味着钳位在4微秒,但不是全部都是这样)。

这会将代码推送到事件队列中,使浏览器有机会在代码执行之前呈现。

答案 1 :(得分:1)

根据the documentationload方法在调用函数之前已经等待内容放在元素中:

  

“如果提供”完整“回调,则在之后执行   已经执行了后处理和HTML插入。“

我已对此进行了测试,并且在回调函数运行时它确实在元素中找到了加载的内容。

如果它在您的代码中不起作用,那么您正尝试做的事情不同于您在问题中显示的内容。

答案 2 :(得分:0)

您可以将html设置为空(如果在加载请求时div中没有​​其他html元素)。 在成功(完成事件)之后,您加载内容(现在我不知道响应是html还是文本,我已经按照您的代码完成了示例)。 如果请求失败,您还可以设置预定文本。

请查看此链接以获取更多信息jquery\load,但这应该可以正常工作

$("#loadDiv").load("mypage.html", function(response, status, xhr) {
  if (status == "success") {
    $("#loadDiv").html("");
  }
  else if(status == "complete"){
          $("#loadDiv").text();
   }
});