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);