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

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

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

你几乎必须这样做:

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

你不能$(document).ready()没有$ (jQuery对象)可用,所以需要进入callback。 你不能确定文档已经准备好了,所以你必须做ready()

对不起,从死亡中提出这个,但1)它仍然是一个“答案”这个问题,2)我find了一个更好的解决scheme。

google.load函数上有一个可选的第三个参数,它带有configuration选项的对象。 其中一个选项是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(...) 。 所以你的应用程序代码是独立于“由谷歌加载”或“直接从你的服务器加载”。

为什么要混合使用$(document).ready() ? 只要摆脱google.setOnLoadCallback函数,并使用jQuery的$(document).ready()

这个:

 google.setOnLoadCallback(chartEnrollment); 

 $(document).ready(chartEnrollment);