gpt4 book ai didi

jquery - jQuery/Ajax 加载的 DOM 脚本何时实际执行?

转载 作者:行者123 更新时间:2023-12-01 04:23:57 24 4
gpt4 key购买 nike

好吧,我觉得问这个问题有点愚蠢。类似问题有很多点击,但我似乎无法回答正确。如果我通过 jQuery/Ajax 修改 DOM,加载的脚本何时实际解析/执行?

下面的代码适用于 F/F,但不适用于 Chrome 或 Opera。 “工作”意味着它执行“do_init()”没有错误。加载的脚本(实际上是一个 svg 文件;“file.svg”)定义了“do_init()”(位于“static”脚本中)所需的许多变量。这些变量对 F/F 可见,但对 Chrome 或 Opera 不可见(“变量 xxx 未定义”)。在所有 3 种情况下,文件/脚本都正确加载到 DOM 中,并且包含 <svg> ,带有 <script>里面。

我可以通过重新排列代码使其在 Opera 中工作(svg 显示)(或在 F/F 中中断),但不能在 Chrome 中工作。使用 .success 和 .complete 没有区别。

谢谢。

<head>
...
<script type="text/javascript" src="do_init.js"></script>
<script type="text/javascript"><![CDATA[
jQuery(document).ready(function() {
...
$("#submit").click(function(e){
e.preventDefault();
var jqxhr =
$("#svg").html(ajax_load).load("file.svg", function(response, status, xhr) {
if(status == "error") {
var msg = "Error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
} else {
do_init(); // Ok in F/F, not in Chrome/Opera
}
});
});
});
]]></script>
</head>
<body>
<button id="submit" type="button">Click Me!</button>
<div id="svg"></div>
</body>

编辑 1

事实证明,它们从未被执行过——至少在 IE9、FF8、Chrome、Opera 和 Safari 中是这样。他们在FF7中被处决。我刚刚编写了一个最小的测试页面,它对脚本进行 Ajax 加载,这只是一个警报。这仅在 FF7 中显示警报。我还尝试过将脚本包裹在 <svg> 中,这没有什么区别。

最佳答案

这就是为什么建议您将 javascript 放在文档末尾、正文末尾的部分原因。

一般情况下,javascript遇到就执行;如果将其放在文档的顶部,它将在加载过程中较早运行,如果放在末尾则较晚运行。但是,当使用库的“onLoad”或“domReady”功能时,您会将执行推迟到稍后的时间。

有关更多信息,请参阅 jQuery 文档:http://api.jquery.com/ready/

While JavaScript provides the load event for executing code when a page is rendered, this event does not get triggered until all assets such as images have been completely received. In most cases, the script can be run as soon as the DOM hierarchy has been fully constructed. The handler passed to .ready() is guaranteed to be executed after the DOM is ready, so this is usually the best place to attach all other event handlers and run other jQuery code. When using scripts that rely on the value of CSS style properties, it's important to reference external stylesheets or embed style elements before referencing the scripts.

编辑我误读了你问题的细节。动态加载的脚本会立即解析,但 onLoad 事件可能(也可能不会!)根据加载脚本的 HTTP 传输方面触发,而不是根据加载脚本的解释触发。通常,这很好(尽管有些浏览器不能可靠地触发事件 - IE,看着你),但你所追求的时间不是脚本被获取的时间,而是实际解析和事件的时间。这些应该在几毫秒内,通常使得差异毫无意义。

使用此技术解决问题有一些不同的看法,其中一些已在 here 中讨论过。和 here - 但似乎没有人具体提到 Chrome 是麻烦的根源。也就是说,轮询所包含脚本的建议方法(通过超时)似乎是建议中最不容易失败的方法,尽管它也是我最不喜欢的解决方案。

关于jquery - jQuery/Ajax 加载的 DOM 脚本何时实际执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com