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

IT技术 javascript jquery onload google-ajax-api
2021-02-23 16:37:42

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

在一个文档中混合这两种方法是否安全?我还没有注意到任何问题,但我想这是一个规模问题。

4个回答

你几乎必须这样做:

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

你不能$(document).ready()没有$(jQuery 对象)可用,所以需要进入回调。而且您无法确定文档在回调中是否准备就绪,因此您也必须这样做ready()

@dilip 我认为(从 $ 开始)这只是 $(document).ready(/* init my stuff */) 的替代语法,所以是的。
2021-04-21 16:37:42
这似乎比必要的要复杂。只需使用 $(function(){//do something here}); 而不是 google.setOnLoadCallback()。
2021-05-04 16:37:42
你的意思是我们应该在谷歌回调函数中提到就绪函数?
2021-05-15 16:37:42

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

google.load函数有一个可选的第三个参数,它采用配置选项的对象。选项之一是callback它还摆脱了单独setOnLoadCallback调用的需要

例如

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

如果您的 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 加载”或“直接从您的服务器加载”。

当你可以做到这一切时为什么要混合$(document).ready()只需摆脱该google.setOnLoadCallback功能并使用 jQuery 的$(document).ready().

这:

google.setOnLoadCallback(chartEnrollment);

变成

$(document).ready(chartEnrollment);
或者在裸JS中: document.addEventListener("DOMContentLoaded", chartEnrolment);
2021-04-30 16:37:42
因此,可以保证chartEnrolment在设置为回调 via 时调用 when的标准在设置为 via 时google.setOnLoadCallback将始终满足$(document).ready()可以给个参考吗?
2021-05-03 16:37:42