【发布时间】:2010-11-01 23:26:00
【问题描述】:
我的网站使用jquery.load() 在页面的很大一部分上进行导航。我真的很欣赏只包含加载内容的特定部分的能力,这里是 id="content" 的 div:
$(frame_selector).load(url +" #content", function(response, status, xhr) {...});
但现在我需要能够运行作为动态加载页面一部分的脚本。 Jquery.load() 删除了这些脚本,但 jquery.ajax() 没有。因此,我在 ajax 调用中复制了 jquery.load 的部分内容功能:
$.ajax({
url: url,
dataType: 'html',
success: function(data, textStatus, XMLHttpRequest) {
// Only include the response within the #content id element.
$(frame_selector).html( jQuery("<div>")
.append(data)
.find("#content")
);
}
});
问题是从 ajax 调用动态加载的脚本运行不可靠。有时它们似乎没有任何效果,也许是因为它们运行得太早了。这些脚本只是在 jquery 中进行 DOM 操作——不依赖于图像或闪存或任何不应该加载的东西。为了不被卡住,我有这个可怕的黑客来让事情正常进行。而不是只使用 AJAX 加载的脚本:
$(document).ready( function() {...} ); // unreliable
我在运行前将脚本延迟了 200 毫秒:
$(document).ready( window.setTimeout( function() {...}, 200 )); // HATE THIS
有人知道我怎样才能在不延迟硬编码的情况下可靠地完成这项工作吗?我猜这是<script> 和我将#content 加载到新div 中的逻辑之间的竞争条件,但我不知道该怎么做。
【问题讨论】:
-
可以同步请求捕获数据。
-
这是一个可怕的想法。在执行同步请求时,您的浏览器 UI 将被锁定。
标签: jquery jquery-load