2011-08-27 22 views
0

我有這樣的代碼在PHP中:創建從PHP新的JSON數據流的jQuery

<?php 

$data = file_get_contents('http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/rss.xml'); 

$xml = simplexml_load_string($data); 

echo json_encode($xml); 

?> 

這jQuery的:

setInterval(function() { 

$.getJSON('bbc.php', function(data) { 
    console.log(data); 
    $.each(data.channel.item, function(index, item){ 
     $('.container').append("<p data-date='" + item.pubDate + "'>" + item.title + "</p>"); 
    }); 
}); 

}, 5000); 

所以,你可以看到,它要追加在前一個數據集下創建許多重複條目的相同數據集。這裏最好的方法是使用客戶端或服務器端,只發送/顯示新數據,而不是再次輸出相同的數據?

回答

2

客戶端解決方案:

您可以保留所有rss項目的全局JavaScript數組。當新項目即將到來時 - 您檢查它是否存在於該數組中,然後將其附加到容器。

var myRSS =[]; 

function rssReader() { 

    $.getJSON('bbc.php', function(data){ 
     $.each(data.channel.item, function(index, item){ 
      // check if item title is stored in the array 
      if (jQuery.inArray(item.title, myRSS)) { 
       //do nothing 
      } else { 
       // save item title in the array 
       myRSS.push(item.title); 

       // publish item 
       $('.container').append("<p data-date='" + item.pubDate + "'>" + item.title + "</p>"); 
      } 
     }); 
    }); 

} 

setInterval(rssReader(), 5000); 
1

您可以生成RSS源數據的校驗和並將其與JSON響應一起發送。然後,在客戶端將每個後續請求中的校驗和發送回服務器,然後服務器將接收到的校驗和與數據校驗和進行比較,並且只有在完整數據集不同時纔會響應。

1

將RSS條目寫入服務器端的某種數據庫中,使用它們的URL作爲唯一索引,然後從數據庫查詢中創建JSON。