可以多次使用google.setOnLoadCallback吗?

时间:2009-09-04 15:45:37

标签: jquery asp.net-mvc google-ajax-api

我正在使用ASP.NET MVC构建一个站点,我有部分视图使用jQuery来做各种事情。我想改用Google的AJAX API并使用他们的加载器加载jQuery。但是,我注意到我再也无法使用$(document).ready()因为Google的加载程序指定了回调google.setOnLoadCallback()

这对我来说有点问题,因为我在各种部分视图中都有$(document).ready(),因为它们会针对自己做不同的事情,我不希望父视图知道。

我可以指定多个回调,只需将$(document).ready()替换为google.setOnLoadCallback(someUniqueCallbackFunction)吗?

这是处理这种情况的理想方式还是还有其他优先选择?

3 个答案:

答案 0 :(得分:32)

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

// 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或窗口加载后堆叠所有要调用的函数。

答案 1 :(得分:1)

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

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

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

这对我有用:)

代码位于http://login.debt-line.org.uk,只需点击查看来源。

答案 2 :(得分:0)

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

假设您正在使用谷歌加载jquery,那么在Google加载了jquery之前,$(document).ready中的代码将无法运行。

只要在您的母版页中加载jQuery,就不确定问题是什么。