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

时间:2012-07-23 12:41:14

标签: javascript html arrays

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

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]是空的。我只能在函数(结果)中显示我的结果,除了它没有显示任何像我从未在数组中放入任何内容的东西。我不明白为什么。

更新:

    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]);
}   

3 个答案:

答案 0 :(得分:0)

您无法在这些点中显示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) {
  ...
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

确保result.feed.entries.length非零并且您实际上正在执行for循环。同样(但很小)在;

后面info[i] = a也不会有什么坏处。