11

我正在使用 ASP.NET MVC 构建一个站点,并且我有使用 jQuery 执行各种操作的部分视图。我正在考虑切换到 Google 的 AJAX API 并使用他们的加载器来加载 jQuery。但是,我注意到我将不再能够使用$(document).ready(),因为 Google 的加载程序指定了一个 callback google.setOnLoadCallback()

这对我来说有点问题,因为我有$(document).ready()各种局部视图,因为它们对自己做了不同的事情,我不想让父视图知道。

我可以指定多个回调并把 's 换成$(document).ready()'sgoogle.setOnLoadCallback(someUniqueCallbackFunction)吗?

这将是处理这种情况的理想方法还是有其他首选方法?

4

3 回答 3

32

是的,您可以setOnLoadCallback使用$(document).ready. 有一个未记录的 SECOND PARAMETER(或者至少,我找不到它)指定何时调用回调函数;可能的值是“false”(默认值) - 在窗口加载时,或“true” - 在 DOM 加载时 (DOMContentLoaded)。一旦所有标记都加载完毕(比 window.load 早得多),DOM 事件就会触发。在所有图像和脚本等完成加载后触发窗口加载事件。

// Very similar to $(document).ready()
google.setOnLoadCallback( OnLoad, true );

// Very similar to $(window).load()
// Same as google.setOnLoadCallback( OnLoad, false );
google.setOnLoadCallback( OnLoad );

是的,您可以在一个页面上多次使用 setOnLoadCallback。这是 AJAX API 的一个非常重要的未记录特性(截至本文发布时未记录)。每次调用 setOnLoadCallback 时,它都会将 DOM 或窗口加载后要调用的所有函数堆叠起来。

于 2009-10-27T07:35:41.473 回答
2

我遇到了同样的问题。我用谷歌搜索在一页上运行了 2 个谷歌搜索,等等......

最后我发现了这一点,因为我希望有 2 个面板基本上在一页上显示谷歌搜索结果。

google.setOnLoadCallback(LoadGoogleNewsResults);
google.setOnLoadCallback(LoadGoogleNewsResultsForum);

这对我有用:)

代码在http://login.debt-line.org.uk,点击查看源代码即可。

于 2010-07-20T12:53:17.290 回答
0

我可能在这里遗漏了重点,但我所知道的用户控件 $(document).ready 和 google.setOnLoadCallback 之间没有冲突。

假设您使用 google 加载 jquery,则 $(document).ready 中的代码将不会运行,直到 google 加载 jquery。

只要 jQuery 被加载到您的母版页中,就不确定问题出在哪里。

于 2009-09-05T16:13:28.730 回答