我有一个返回JSON数据的函数,我希望全局访问数据。我已经尝试将函数作为变量返回,然后再次返回它。 新闻目前仍然未定义。
我想要的是var News等于results.feed的值
var News = function (){
google.load("feeds", "1");
var foo;
function initialize() {
var feed = new google.feeds.Feed("http://www.telegraph.co.uk/news/uknews/rss");
feed.setNumEntries(10);
//console.log(feed),
feed.load(function(result) {
if (!result.error) {
console.log(result.feed);
foo = result.feed;
}
});
};
google.setOnLoadCallback(initialize);
return foo;
}();
console.log(News);
答案 0 :(得分:1)
您的主要问题是,在请求完成之前调用了return foo;
。 JS引擎启动请求,然后继续操作而不关心结果。 foo
并未填充结果。
异步请求的典型问题。
根据documentation load()
加载Feed。成功加载Feed后,将调用回调。
feed.load(function(result) {
/* result is accessible only in this scope*/
}
E.g。为了在页面上显示数据,你必须在回调范围内调用 display() -Function
feed.load(function(result) {
display(result)
}
您可以(技术上)将结果分配给变量:
feed.load(function(result) {
globalvar=result;
}
但是你必须维护这个变量的不同状态,因为在某个时间点它没有被设置,并且在稍后的时间点它将被设置。
有不同的方法可以解决这个问题:
1)Promises
或
2)MVC-Frameworks,如Knockout,Backbone,https://angularjs.org/ 当这些模型是最新的时,你有模型的地方和事件。
答案 1 :(得分:0)
在不知道您正在使用什么网页框架的情况下(比如谷歌。*),很难以更详细的方式提供帮助。
但是,如果我猜测,我会说像JavaScript中的大多数事情一样,这是一个异步操作,你的函数在请求完成之前返回。
这是JavaScript的一大障碍,它不是......像其他语言一样直接,你经常要编写回调,这就是你应该在这里做的。
在你的feed.load中,它需要一个包含结果的函数,这看起来像回调。
feed.load(function(result) {
if(!result.error) {
// This will print out the feed (presumably an object).
console.log(result.feed);
}
}
你必须自己决定如何最好地处理这个问题,至少清楚地说明你想要实现的目标,而不仅仅是要求代码。