我可以在Google Loader运行后运行JavaScriptfunction吗?
我正在使用google.load()
加载Google API,我需要处理一些由它构建的内容,但我需要在它已经完全加载后运行JavaScript,有没有办法确保发生?
这是我如何构建图像列表,我需要为每个img
标签添加一个属性,但是在它构建完成之后才能这样做?
google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("myfeed.rss"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var entryTitle = entry.title; var entryContent = entry.content; imgContent = entryContent + ""+entryTitle+"
"; var div = document.createElement("div"); div.className = "image"; div.innerHTML = imgContent; container.appendChild(div); } } }); } google.setOnLoadCallback(initialize);
一个简单的方法是在setOnLoadCallback
创建一个匿名函数, setOnLoadCallback
所示:
google.setOnLoadCallback(function(){ //Run the Initialize Function initialize(function(){ //Run anything else here like alert("My function can run here :)") }); });
然后只需修改初始化函数。
f unction initialize() {
> function initialize(callback) {
这样你就不会将匿名函数传递给初始化。
然后在feed.load(function(result) {});
你可以做callback()
来激活你的回调。
你说匿名函数让你感到困惑,让我先向你展示一些编写函数的方法
-
function hello(){}
-
hello = function(){}
以上是非匿名函数
匿名函数是未分配给变量的函数,因此解析器将遍历函数并且不执行它
alert("Start") function() { alert("Middle") } alert("End");
运行上面的内容将在对话框中显示“开始”和“结束”,但中间将永远不会显示,因为该function尚未执行。
function如下:
( F )( P )
其中F是匿名函数,P是应该在范围内的参数,您可以直接运行匿名函数,而无需将函数赋值给变量liek,因此:
alert("Start") ( function(Doc){ alert("Middle"); } )(document) alert("End")
所以document
被传递到匿名函数并成为该范围内的Doc,而Start,Middle和End都将被执行为使用自执行匿名函数
好的,所以我可能已经超越了解释如此生病,只是很快就会告诉你原始方法是如何工作的
http://en.wikipedia.org/wiki/Ajax_(programming)
Ajax是异步的,这意味着当您调用google等服务器获取某些信息时,您的javascript将继续执行,这意味着您等待javscript执行的数据时…
这就是我们投入回调的原因,就像initialize
回调一样,谷歌Javascript库在获取数据时执行,何时创建我们自己的并在我们想要的时候执行。
是的, API文档指定您可以在google.load()
方法的第三个参数中包含回调函数。
像这样的东西应该工作:
google.load("jquery", "1.4.2", { callback: function() { alert('Finished!'); } });