【发布时间】:2011-11-08 15:48:05
【问题描述】:
好吧,我觉得问这个有点傻。类似问题有很多点击,但我似乎无法正确回答。如果我通过 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 中(或在 F/F 中中断)使其工作(svg 显示),但不能在 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> 包裹的脚本,这没什么区别。
【问题讨论】:
-
您可能想尝试使用 $.get() 而不是 load()。虽然 jQuery 文档声称脚本会被执行,除非你给 load() 一个目标,但我在使用 load() 加载脚本时遇到了问题,而我没有使用 $.get()
-
我刚刚尝试使用 get 代替,但在加载 DOM 时遇到了问题 - 这很容易加载。如果我可以加载 DOM,我会回帖,看看它是否有所作为......