我在PHP中有这个代码:
<?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);
因此,正如您所看到的,它将在前一个数据集下面附加相同的数据集,从而创建许多重复的条目。在这里,使用客户端或服务器端,仅发送回/显示新数据而不是再次输出相同数据的最佳方法是什么?
答案 0 :(得分: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 :(得分:1)
您可以生成rss订阅源数据的校验和,并将其与JSON响应一起发送。然后在客户端在每个后续请求中将该校验和发送回服务器,然后服务器将接收到的校验和与数据校验和进行比较,如果它们不同则仅响应完整数据集。
答案 2 :(得分:1)
将RSS条目写入服务器端的某种数据库,将其URL用作唯一索引,然后从数据库查询创建JSON。