我正在使用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 + "<p>"+entryTitle+"</p>";
var div = document.createElement("div");
div.className = "image";
div.innerHTML = imgContent;
container.appendChild(div);
}
}
});
}
google.setOnLoadCallback(initialize);
答案 0 :(得分:2)
是的,API documentation指定您可以在google.load()
方法的第三个参数中包含回调函数。
这样的事情应该有效:
google.load("jquery", "1.4.2", {
callback: function() {
alert('Finished!');
}
});
答案 1 :(得分:2)
一种简单的方法是在setOnLoadCallback
中创建一个匿名函数,如下所示:
google.setOnLoadCallback(function(){
//Run the Initialize Function
initialize(function(){
//Run anything else here like
alert("My function can run here :)")
});
});
然后只需修改初始化函数。
f unction initialize() {
&gt; function initialize(callback) {
所以你没有将匿名函数传递给初始化。
然后在feed.load(function(result) {});
内你可以callback()
来激活你的回调。
你说匿名函数会让你感到困惑,让我先向你展示一些编写函数的方法
function hello(){}
hello = function(){}
以上是非匿名函数
匿名函数是未分配给变量的函数,因此解析器遍历函数并且不执行它
alert("Start")
function()
{
alert("Middle")
}
alert("End");
运行上面的内容将在对话框中显示“开始”和“结束”,但中间将永远不会显示,因为该功能尚未执行。
功能如下:
( F )( P )
其中F是匿名函数,P是应该在范围内的参数,您可以直接运行匿名函数,而无需将函数赋值给变量liek,所以:
alert("Start")
(
function(Doc){
alert("Middle");
}
)(document)
alert("End")
所以document
被传递到匿名函数并成为该范围内的Doc,而Start,Middle和End都将在您使用self executed anonymous function
好的,所以我可能已经超过了顶部的解释如此生病只是很快就会告诉你原始方法是如何工作的
http://en.wikipedia.org/wiki/Ajax_(programming)
Ajax是异步的,这意味着当您调用google等服务器获取某些信息时,您的javascript将继续执行,这意味着您在等待javscript执行的数据时...
这就是我们投放回调的原因,就像谷歌Javascript库在获取数据时执行的initialize
回调,创建我们自己的并在我们想要的时候执行。