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