我的网站jquery.load()
用于在页面的一大块上进行导航。我真的很欣赏只包含加载内容的特定部分的能力,这里是 id="content" 的 div:
$(frame_selector).load(url +" #content", function(response, status, xhr) {...});
但现在我需要能够运行作为动态加载页面一部分的脚本。 Jquery.load()
去掉这些脚本,但jquery.ajax()
没有。jquery.load
因此,我复制了 ajax 调用中的部分内容功能,如下所示:
$.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 和我的逻辑之间的竞争条件,但我不知道该怎么做。