【问题标题】:After a jQuery load command is there a way to force a wait until the html has been rendered into the div?在 jQuery 加载命令之后,有没有办法强制等待 html 被渲染到 div 中?
【发布时间】:2012-06-26 11:18:20
【问题描述】:

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

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

但是,由于 html 尚未呈现到 div 中,因此警报将显示“未定义”。

我看过这个问题 - How to wait for jQuery's load function to render loaded content before executing callback function - Jake 的回答对我来说是最好的。在我的实际页面上,我有 8 个,延迟两秒,在呈现 html 之前仍有一些在运行。

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

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

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

    "如果提供了一个“完成”回调,它会在之后执行 已执行后处理和 HTML 插入。”

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

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

    【讨论】:

    • 你是对的。我正在调用另一个函数;当我最初收到错误时,我已经失去了我正在做的事情,但我认为我正在做类似$("#loadDiv").load("mypage.html", myFunction()); 而不是$("#loadDiv").load("mypage.html", function(){myFunction()});
    【解决方案2】:

    您应该能够使用setTimeout() 将您的代码包装在回调中,并使用0 的超时时间(浏览器旨在限制在4 微秒,但并非所有浏览器都这样做)。

    这会将代码推送到事件队列中,让浏览器有机会在代码执行之前进行渲染。

    【讨论】:

    • 我试过 setTimeout 有 250+ 的延迟,但我一直收到错误(我在我的实际代码中加载了一个函数)现在又试了一次,它工作得很好......不知道我是什么以前做错了。
    【解决方案3】:

    您可以将 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();
       }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 2023-03-29
      • 1970-01-01
      • 2018-07-30
      • 2011-12-05
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      相关资源
      最近更新 更多