如何从回调函数中获取值 [英] how to get the value from a callback function
问题描述
我对JavaScript比较陌生,而且面临一些困难。我有两个java脚本文件,如下所示。我无法在getRss函数中获取变量 entry_title 的值,并将其存储在变量 Rss1_title 和 Rss2_title 中。创建一个全局变量并将其分配给 entry_title 会使事情变得更糟,因为我无法知道标题来自哪个Rss url。有没有简单的方法来获得回调函数的价值?
< script type =text / javascriptsrc =jsRss.js>< / script>
< script type =text / javascriptsrc =notification.js>< / script>
我的notification.js文件
function get_rss1_feeds(){
var Rss1_title = getRss(http://yofreesamples.com/category/free-coupons/feed/?type=rss);
}
函数get_rss2_feeds(){
var Rss2_title = getRss(http://yofreesamples.com/category/real-freebies/feed/?type=rss) ;
}
setTimeout('get_rss1_feeds()',8000);
setTimeout('get_rss2_feeds()',7000);
我的jsRss.js文件:
函数getRss(url){
if(url == null)return false;
google.load(feeds,1);
//我们的回调函数,用于加载订阅源时。
函数feedLoaded(result){
if(!result.error){
var entry = result.feed.entries [0];
var entry_title = entry.title; //需要获得这个值
$ b函数Load(){
//创建一个将抓取feed的feed实例。
var feed = new google.feeds.Feed(url);
//呼叫负载将关闭请求。它需要一个回调函数。
feed.load(feedLoaded);
}
google.setOnLoadCallback(Load);
错误:
当setTimeout(get_rss1_feeds,8000);方法被称为我得到一个空白屏幕。
我的控制台中出现错误,指出八进制文字和八进制转义序列已被弃用,它指向此脚本中的第6行。
是否因为我使用google-api解析了我的Rss?
if(window ['google'] != undefined&& window ['google'] ['loader']!= undefined){
if(!window ['google'] ['feeds']){
window [ google'] ['feeds'] = {};
google.feeds.Version ='1.0';
google.feeds.JSHash ='8992c0a2cdf258e5bd0f517c78243cd6';
google.feeds.LoadArgs ='file\75feeds\46v\0751';
}
google.loader.writeLoadTag(css,google.loader.ServiceBase +/api/feeds/1.0/8992c0a2cdf258e5bd0f517c78243cd6/default+en.css,false);
google.loader.writeLoadTag(script,google.loader.ServiceBase +/api/feeds/1.0/8992c0a2cdf258e5bd0f517c78243cd6/default+en.I.js,false);
,您可以在回调中将其返回,或者以其他方式提供,例如将其导出到您希望的位置可见的更高范围。在这种情况下,这是全局范围,所以我建议不要这样。
function getRss(url,callback){
// ...
函数feedLoaded(result){
if(!result.error){
var entry = result.feed.entries [0];
var entry_title = entry.title; //需要得到这个值
callback&&回调(ENTRY_TITLE);
并且像这样称呼它,
函数get_rss1_feeds(){
var Rss1_title = getRss(http://yofreesamples.com/category/free-coupons/feed/ ?type = rss,function(entry_title){
//这个范围可以访问entry_title
});
}
另外,像这样使用setTimeout:
setTimeout(get_rss1_feeds,8000);
而非
setTimeout(get_rss1_feeds(),8000);
作为后者使用eval,而前者传递函数的引用。
I am relatively new to javascript and I am facing some difficulty.I have two java script files as I have shown below. I am having trouble getting the value of the variable entry_title inside the getRss function and storing it inside the variables Rss1_title and Rss2_title . Creating a global variable and assigning it to entry_title will make things worse as I will not be able to know from which Rss url the title came from. Is there a easy way to get the value of the callback functions ?
<script type="text/javascript" src="jsRss.js"></script>
<script type="text/javascript" src="notification.js"></script>
My notification.js file
function get_rss1_feeds(){
var Rss1_title = getRss("http://yofreesamples.com/category/free-coupons/feed/?type=rss");
}
function get_rss2_feeds(){
var Rss2_title = getRss("http://yofreesamples.com/category/real-freebies/feed/?type=rss");
}
setTimeout('get_rss1_feeds()',8000);
setTimeout('get_rss2_feeds()',7000);
My jsRss.js file:
function getRss(url){
if(url == null) return false;
google.load("feeds", "1");
// Our callback function, for when a feed is loaded.
function feedLoaded(result) {
if (!result.error) {
var entry = result.feed.entries[0];
var entry_title = entry.title; // need to get this value
}
}
function Load() {
// Create a feed instance that will grab feed.
var feed = new google.feeds.Feed(url);
// Calling load sends the request off. It requires a callback function.
feed.load(feedLoaded);
}
google.setOnLoadCallback(Load);
}
Errors :
When the setTimeout(get_rss1_feeds, 8000); method is called I get a blank screen. I get a error in my console saying octal literals and octal escape sequences are deprecated and it is pointing to the 6th line in this script. Is it because I am using google-api for parsing my Rss?
if (window['google'] != undefined && window['google']['loader'] != undefined) {
if (!window['google']['feeds']) {
window['google']['feeds'] = {};
google.feeds.Version = '1.0';
google.feeds.JSHash = '8992c0a2cdf258e5bd0f517c78243cd6';
google.feeds.LoadArgs = 'file\75feeds\46v\0751';
}
google.loader.writeLoadTag("css", google.loader.ServiceBase + "/api/feeds/1.0/8992c0a2cdf258e5bd0f517c78243cd6/default+en.css", false);
google.loader.writeLoadTag("script", google.loader.ServiceBase + "/api/feeds/1.0/8992c0a2cdf258e5bd0f517c78243cd6/default+en.I.js", false);
}
Seeing as it's a different scope, you can either return it in a callback, or provide it in another way such as exporting it to a higher scope that is visible to your desired location. In this case, it's the global scope, so I'd advise against that.
function getRss(url, callback) {
//...
function feedLoaded(result) {
if (!result.error) {
var entry = result.feed.entries[0];
var entry_title = entry.title; // need to get this value
callback && callback(entry_title);
}
}
and call it like so,
function get_rss1_feeds() {
var Rss1_title = getRss("http://yofreesamples.com/category/free-coupons/feed/?type=rss", function(entry_title) {
// This scope has access to entry_title
});
}
As an aside, use your setTimeout like so:
setTimeout(get_rss1_feeds, 8000);
rather than
setTimeout("get_rss1_feeds()", 8000);
as the latter uses eval, whereas the former passes a reference to the function.
这篇关于如何从回调函数中获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!