可以多次使用google.setOnLoadCallback吗?

Jos*_*eph 10 asp.net-mvc jquery google-ajax-api

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

这对我来说有点问题,因为我有$(document).ready()各种部分视图,因为他们做了不同于自己的事情,我不希望父视图知道.

我可以指定多个回调,只是换出$(document).ready()用的google.setOnLoadCallback(someUniqueCallbackFunction)

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

Rya*_*ale 32

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

// Very similar to $(document).ready()
google.setOnLoadCallback( OnLoad, true );
Run Code Online (Sandbox Code Playgroud)
// Very similar to $(window).load()
// Same as google.setOnLoadCallback( OnLoad, false );
google.setOnLoadCallback( OnLoad );
Run Code Online (Sandbox Code Playgroud)

是的,您可以在一个页面上多次使用setOnLoadCallback.这是AJAX API的一个非常重要的未记录的功能(在此发布时未记录).每次调用setOnLoadCallback时,它都会在DOM或窗口加载后堆叠所有要调用的函数.


Tri*_*ith 0

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

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

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