使用jQuery $(document).ready()的google.setOnLoadCallback,可以混合使用吗?

时间:2009-02-17 11:34:03

标签: javascript jquery onload google-ajax-api

我正在使用Google Ajax API,他们建议我使用google.setOnLoadCallback()执行与其API相关的各种操作,但我也使用jQuery的$(document).ready()来执行与Google无关的其他JS操作API。

将这两种方法混合在一个文档中是否安全?我没有发现任何问题,但我认为这是一个规模问题。

4 个答案:

答案 0 :(得分:68)

你几乎必须这样做:

google.setOnLoadCallback(function() {
  $(function() {
    // init my stuff
  });
});

如果$(document).ready()(jQuery对象)不可用,则无法执行$,因此需要进入回调。而且您无法确定文档在回调中是否已准备就绪,因此您也必须执行ready()

答案 1 :(得分:49)

很抱歉从死里复活,但是1)它仍然是这个问题的“答案”,2)我找到了更好的解决方案。

google.load函数有一个可选的第3个参数,它接受配置选项的对象。其中一个选项是callback。它还消除了单独setOnLoadCallback电话的需要。

E.g。

google.load('visualization', '1.0', {
    'packages': "charttype", 
    'callback': $jQ.proxy(me.setupChart, me)
});

所以:

<script src="https://www.google.com/jsapi"></script>
<script>
$(document).ready(function () {
    function mapsLoaded() {
        etc etc etc
    }

    google.load("maps", "2", {"callback" : mapsLoaded});
});
</script>

请参阅: https://developers.google.com/loader/#Dynamic

答案 2 :(得分:6)

如果您的JavaScript代码位于自己的js文件中而不是HTML文档中,您也可以在文档中执行此操作:

<script>
        google.load("jquery", "1.7.0");
        google.load("jqueryui", "1.8.16");
        google.setOnLoadCallback(function() {
             var script = document.createElement("script");
             script.setAttribute("type", "text/javascript");
             script.setAttribute("src", "my.js");
             document.getElementsByTagName("html")[0].appendChild(script);
        });
</script>

在从谷歌加载所有其他内容后加载my.js。在my.js文件中,您可以执行$(document).ready(...)。因此,您的应用程序代码独立于“由Google加载”或“直接从您的服务器加载”。

答案 3 :(得分:4)

为什么要使用$(document).ready()进行混合?只需摆脱google.setOnLoadCallback函数并使用jQuery&#39; s $(document).ready()

:此:

google.setOnLoadCallback(chartEnrollment);

<强>变

$(document).ready(chartEnrollment);