我正在使用Google Ajax API,他们建议我使用google.setOnLoadCallback()
来做与他们的API相关的各种事情,但我也在使用jQuery的$(document).ready()
来做其他与Google API无关的JS事情。
在一个文档中混合这两种方法安全吗?我还没有注意到任何问题,但我想这是一个规模问题。
发布于 2009-02-17 11:38:57
你几乎必须这样做:
google.setOnLoadCallback(function() {
$(function() {
// init my stuff
});
});
如果没有$
( jQuery对象)可用,就不能执行$(document).ready()
,因此需要在回调中进行。而且您不能确保文档在回调中准备就绪,因此您还必须执行ready()
。
发布于 2012-10-05 00:25:40
很抱歉重提这个问题,但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>
发布于 2011-11-12 23:27:03
如果您的JavaScript代码驻留在它自己的js文件中,而不在文档中,您也可以在文档中这样做:
<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加载”或“直接从您的服务器加载”。
https://stackoverflow.com/questions/556406
复制相似问题