2016-04-11 15 views
0

Aşağıdaki JS kodunu kullanarak RSS'yi görüntülemeye çalışıyorum. Ancak bunu yaptığımda, hem RSS beslemeleri aynı içeriğe (daha sonra yürütecek olanı) hem de tüm beslemeler aynı div'a eklenir. Bence rss = this soruna neden oluyor. Herhangi bir geçici çözüm var mı?RSS beslemelerinden içerikler divlere ayırmak

HTML:

<div id="rss1" class="rss-widget"> 
     <ul></ul> 
</div> 
<div id="rss2" class="rss-widget"> 
     <ul></ul> 
</div> 
<div id="rss3" class="rss-widget"> 
     <ul></ul> 
</div> 

JS:

function RSSWidget(id, url) { 

rss = this; 
rss.FEED_URL = url; 

rss.JSON = new Array(); 
rss.widgetHolder = $('#' + id + ' ul '); 
rss.storiesLimit = 15; 

rss.renderBlogItem = function (object) { 
    var item = '<li class="blog-item">'; 
    item += '<a href="' + object.link + '">'; 
    item += '<div class="blog-item-title">' + object.title + '</div>'; 
    item += '<div class="blog-item-author">' + object.author + '</div>'; 
    // item += '<div class="blog-item-content">' + object.content + '</div>'; 
    item += '</a>' 
    item += '</li>'; 

    rss.widgetHolder.append(item); 
} 

return $.ajax({ 
    url: 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(rss.FEED_URL), 
    dataType: 'json', 
    success: function (data) { 
     if (data.responseData.feed && data.responseData.feed.entries) { 
      $.each(data.responseData.feed.entries, function (i, e) { 
       rss.JSON.push({ //add objects to the array 
        title: e.title, 
        author: e.author, 
        content: e.content || "", 
        link: e.link 
       }); 
      }); 

      if (rss.storiesLimit > rss.JSON.length) 
       rss.storiesLimit = rss.JSON.length; 

      for (var i = 0; i < rss.storiesLimit; i++) { 
       rss.renderBlogItem(rss.JSON[i]); 
      } 

      $('#' + id + ' li ').each(function() { 
       var delay = ($(this).index()/rss.storiesLimit) + 's'; 
       $(this).css({ 
        webkitAnimationDelay: delay, 
        mozAnimationDelay: delay, 
        animationDelay: delay 
       }); 
      }); 

     } 
    } 
}); 

} 

$.when(RSSWidget('rss1', "http://rss.cnn.com/rss/money_markets.rss")) 
.then(function() { 
    RSSWidget('rss2', "http://feeds.reuters.com/reuters/financialsNews") 
}) 
.then(function() { 
    RSSWidget('rss3', "http://finance.yahoo.com/rss/topfinstories") 
}); 

cevap

1
.then(RSSWidget('rss2', "http://feeds.reuters.com/reuters/financialsNews")); 

hemen çağrılır. Ayrıca

.then(function() { 
    RSSWidget('rss2', "http://feeds.reuters.com/reuters/financialsNews") 
}) 

, hiçbir söz RSSWidget döndürülen ikinci RSSWidget .then() içinde anonim fonksiyonu aramayı deneyin; RSSWidget'dan jQuery promise nesnesini döndürmek için RSSWidget'dan return $.ajax(/* settings */)'u ekleyebilirsiniz.

+0

bunu denedi .. Şanssızlık yok –

+1

@AdityaVikasDevarapalli RSSWidget'den bir söz vermiyorsunuz. 'RSSWidget' – guest271314

+0

içinde evet $ .ajax (/ * settings * /)' i dahil etmeyi deneyin! Bu işe yaradı ... Çok teşekkürler ... Bu yüzden benim hatamı detaylandırır mısınız? –