0

Java Scriptを使用してWindows 8アプリで作業しています

次のような RSS フィードはほとんどありません。

  1. http://dmadmin.dailymirror.lk/index.php?option=com_ninjarsssyndicator&feed_id=16&format=raw

  2. http://dmadmin.dailymirror.lk/index.php?option=com_ninjarsssyndicator&feed_id=17&format=raw

次の関数は、各 RSS フィードを取得し、JSON オブジェクトに変換します。しかし、やりたいのは、すべての RSS フィードを 1 つの JSON オブジェクトに取得することです。(2 つの RSS フィードがあります。そのため、関数呼び出しの後、2 つの個別の JSON オブジェクトが得られました。しかし、1 つのオブジェクトが必要です)

    for (x = 0; x < listOfFeed.length; x++) {
        //loop x start
        feedburnerUrl = listOfFeed[x].url,
            feedUrl = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&output=json&num=999&q=" + encodeURIComponent(feedburnerUrl);

        WinJS.xhr({
            url: feedUrl,
            responseType: "rss/json"
        }).done(function complete(result) { //result = [object XMLHttpRequest]  for the requested URLs                                                                                   
            var jsonData = JSON.parse(result.response);  //jsonData = [object Object] create Object
            var entries = jsonData.responseData.feed.entries; //entries = [object object][object object][object object]......

            entries.forEach(function (entry) { // process the entries...                                

               console.log('{"title" :"' + entry.title + '","Date":"' + entry.publishedDate + '"},');                          
            });
        });
    }  //loop x finish
}
  1. listOfFeed = RSS URL の配列。
  2. エントリ = 完全な JSON オブジェクト内の各オブジェクト (1 つの URL 内に 25 の項目があります)。
  3. jsonData = 各 URL の JSON 形式。2 つ取得しましたが、これら 2 つの URL に対して 1 つの JSON オブジェクトが必要です。

助けてくれてありがとう...

4

1 に答える 1

0

Array.concat()エントリ配列を結合するために使用できます。未処理のリクエストの数を追跡し、0 に達したときにエントリを処理することもできます。次のようなものです。

var allEntries = [];
var pendingRequestCount = listOfFeed.length;

var onRequestFinished = function() {
  pendingRequestCount--;

  if (pendingRequestCount === 0) {
    allEntries.forEach(function (entry) { // process the entries...                                
      console.log('{"title" :"' + entry.title + '","Date":"' + entry.publishedDate + '"},');                          
    });
  }
};

for (x = 0; x < listOfFeed.length; x++) {
  ... // Same as before
  }).done(function complete(result) {
    var jsonData = JSON.parse(result.response);  
    var entries = jsonData.responseData.feed.entries; 

    allEntries = allEntries.concat(entries);

    onRequestFinished();        
  });
}  //loop x finish

また、失敗したリクエストを処理し、onRequestFinished 関数も呼び出す必要があります。

于 2013-10-07T07:11:48.187 に答える