将变量添加到函数中的数组中

adding variable into an array in a function

本文关键字:数组 函数 变量 添加      更新时间:2024-01-20

我在将变量放入数组时遇到问题。这是我的代码:

var info = new Array();
google.load("feeds", "1");
function initialize() {
  var feed = new google.feeds.Feed("http://www.ntvmsnbc.com/id/24927681/device/rss/rss.xml");
  feed.setNumEntries(6);
  feed.load(function(result) {
    if (!result.error) {
      var container = document.getElementById("feed");
      var html = '';
      for (var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i];
        var a = " " ;
        a += entry.title;
        info[i] = a
       html += '<p>' + entry.publishedDate + '&nbsp' + entry.title;
      }
      container.innerHTML = html;
    }
    alert(info[0]);
  });
  //alert(info[0]);
}
//alert(info[0]);
google.setOnLoadCallback(initialize);

您可以看到一个名为info的数组。我正在尝试将entry.title添加到其中。你可以看到一些地方被注释掉了。我的信息[0]为空。我只能在函数(result)中显示我的结果,只是它不会显示任何内容,就像我从未在数组中放入任何内容一样。我不明白为什么。

更新:

    var info = new Array();
google.load("feeds", "1");
function initialize(cb) {
  var feed = new google.feeds.Feed("http://www.ntvmsnbc.com/id/24927681/device/rss/rss.xml");
  feed.setNumEntries(6);
  feed.load(function(result) {
    if (!result.error) {
      var container = document.getElementById("feed");
      var html = '';
      for (var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i]; 
       html += '<p>' + entry.publishedDate + '&nbsp' + entry.title;
        cb(entry.title);
      }
      container.innerHTML = html;
    }
  });
}
google.setOnLoadCallback(function(){
initizalize(processInfo);}
);
function processInfo(information){
    info[info.length] = information;
    alert(info[info.length]);
}

最后版本

    var info = new Array();
google.load("feeds", "1");
function initialize(cb) {
  var feed = new google.feeds.Feed("http://www.ntvmsnbc.com/id/24927681/device/rss/rss.xml");
  feed.setNumEntries(6);
  feed.load(function(result) {
    if (!result.error) {
      var container = document.getElementById("feed");
      var html = '';
      for (var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i];
        var a= " ";
        a += entry.title;
        info[i] = a;
       html += '<p>' + entry.publishedDate + '&nbsp' + entry.title;
      }
      container.innerHTML = html;
    }
     cb(info);
  });
}
google.setOnLoadCallback(function(){
initizalize(processInfo);}
);
function processInfo(info){
    alert(info[0]);
}   

这是因为AJAX是异步的,基本上意味着它至少要运行完其余的代码才能运行。任何依赖于AJAX调用(或任何其他异步回调)定义的东西的东西都必须在该回调内,或者其本身推迟到以后。

确保result.feed.entries.length为非零,并且您实际上正在执行for循环。此外(但很小)在info[i] = a 之后有一个;也没有坏处

您不能在这些点中显示info,因为对feed.load()的调用是异步的,并且到那时还没有完成。

您需要在.load回调函数中继续所有处理,例如:

function initialize(cb) {
  feed.load(function(result) {
    ...
    cb(info);   // only call the callback once the data is loaded
  });
}
// call the above function, passing a callback handler
google.setOnLoadCallback(function() {
  initialize(processInfo);
}));
// defer all of your data processing to here
function processInfo(info) {
  ...
}