我的网站使用jquery.load()
在页面的大块内进行导航。我很欣赏的能力,只只包括加载内容的特定部分,在这里使用id =“内容”股利:在jquery.ajax()加载的页面中运行的脚本运行document.ready太早
$(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操作 - 而不是依赖图像或Flash或任何不应该加载的东西。为了防止被卡住,我有这个可怕的黑客工作。而不是仅仅使用AJAX加载脚本:
$(document).ready(function() {...}); // unreliable
我之前运行延迟脚本的200ms:
$(document).ready(window.setTimeout(function() {...}, 200)); // HATE THIS
任何人都知道我怎样才能使这项工作不可靠的硬编码的延迟?我猜这是<script>
和我的逻辑加载#content
到一个新的div之间的竞争条件,但我不知道该怎么办。
您可以同步请求以捕获数据。 – dz1984 2010-11-01 23:57:44
这是一个可怕的想法。当同步请求执行时,您的浏览器UI将被锁定。 – 2010-11-02 04:28:45