Создайте поток новых данных JSON из PHP в jQuery - PullRequest
0 голосов
/ 27 августа 2011

У меня есть этот код в 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);

Итак, как вы можете видеть, он собирается добавить тот же набор данных ниже предыдущегосоздавая много дублированных записей.Каков наилучший подход здесь, используя клиентскую или серверную сторону, чтобы только отправлять обратно / отображать новые данные, а не выводить те же данные снова?

Ответы [ 3 ]

2 голосов
/ 27 августа 2011

Решение на стороне клиента:

Вы можете сохранить глобальный массив JavaScript всех элементов rss.Когда приходит новый элемент - вы проверяете, присутствует ли он в этом массиве, затем добавляете его в контейнер.

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 голос
/ 27 августа 2011

Запишите записи RSS в какую-либо базу данных на стороне сервера, используйте их URL в качестве уникального индекса, затем создайте JSON из запроса БД.

1 голос
/ 27 августа 2011

Вы можете сгенерировать контрольную сумму данных RSS-каналов и отправить их вместе с ответом JSON.Затем на клиентской стороне отправляет эту контрольную сумму обратно на сервер в каждом последующем запросе, затем сервер сравнивает полученную контрольную сумму с контрольной суммой данных и отвечает полным набором данных, только если они различаются.

...