0

配列に変数を入れることに問題があります。これが私のコードです:

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を追加しようとしています。いくつかの場所がコメントアウトされているのを見ることができます。私のinfo[0]は空です。結果はfunction(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]);
}   
4

3 に答える 3

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) {
  ...
}
于 2012-07-23T12:43:39.663 に答える
0

これは、AJAXが非同期であるためです。つまり、基本的に、少なくとも残りのコードが実行されるまで実行されません。AJAX呼び出し(または他の非同期コールバック)で定義されたものに依存するものはすべて、そのコールバック内にある必要があります。そうでない場合は、それ自体が後で延期されます。

于 2012-07-23T12:44:02.770 に答える
0

result.feed.entries.lengthがゼロでないことと、実際にforループを実行していることを確認してください。また(マイナーですが);info[i] = a

于 2012-07-23T12:44:43.580 に答える