创建从PHP到jQuery的新JSON数据流


Create a stream of new JSON data from PHP to jQuery

我在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