我正在使用ASP.NET MVC构建一个站点,我有部分视图使用jQuery来做各种事情。我想改用Google的AJAX API并使用他们的加载器加载jQuery。但是,我注意到我再也无法使用$(document).ready()
因为Google的加载程序指定了回调google.setOnLoadCallback()
。
这对我来说有点问题,因为我在各种部分视图中都有$(document).ready()
,因为它们会针对自己做不同的事情,我不希望父视图知道。
我可以指定多个回调,只需将$(document).ready()
替换为google.setOnLoadCallback(someUniqueCallbackFunction)
吗?
这是处理这种情况的理想方式还是还有其他优先选择?
答案 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,就不确定问题是什么。