2013-03-16 3 views
0

У меня есть php-скрипт, который получает последнее твист конкретных пользователей в формате JSON. JSON анализируется на функцию AJAX, которая отображает последний твит в ID на странице. Таймер устанавливается на каждые x секунд для выполнения вышеизложенного, получения последнего твита без необходимости обновления страницы. Это прекрасно работает.Как проверить, было ли изменено значение объекта JSON при захвате нового запроса

Теперь я пытаюсь создать функцию уведомления, отображающую уведомление при появлении нового твита для отображения. Каждый твит имеет уникальный идентификатор, называемый «id_string» в извлеченном JSON. То, что я хочу сделать, - это как-то сохранить генерируемое значение id_string, а затем каждый раз, когда запрос делается для получения нового твита, проверьте новый «id_string» на сохраненный, а если он отличается, то отобразите уведомление.

Любые идеи о том, как это сделать, были бы замечательными ?! Я просмотрел локальное хранилище, но я не очень хорошо разбираюсь в этом, и насколько мне известно, вы не можете проверять строки против других строк в локальном хранилище.

Вот необходимый код, чтобы помочь интерпретировать мой вопрос:

PHP, чтобы сделать запрос на щебет и генерировать вывод в формате JSON (tweets.php):

require_once('config/FrameFunctions.php'); 

$output = array(); 

foreach ($tweeters as $i => $tweeter){ 
    $theTweeter = new Tweeter($tweeter, $tmhOAuth); 
    $allinfo = $theTweeter->getTweets(); 
    $output[$i] = $allinfo; 
} 

header("Content-type: application/json"); 
echo json_encode($output); 

В JavaScript, чтобы сделать запрашивать каждые х секунд и генерировать выходной сигнал клиента:

$(document).ready(function() { 

    $('.fancybox').fancybox(); 
    /* 
    * call ajax function and update latest 
    */   

    var refreshTweets = function() { 
     console.log("updating.."); 
     $.ajax({url:"tweets.php",success:function(result){ 
     tweets = eval(result); 

     for(i=0;i<tweets.length;i++){ 
      $("#latesttweet"+(i+1)).html(
       tweets[i][0].user.name + ": " + tweets[i][0].text 
      ); 
     } 

     }}); 

    } 
    refreshTweets(); 

    //set the time in milliseconds here for each refresh 
    setInterval(refreshTweets , 30000); //Interval 

}); 
+0

Почему для этого требуется локальное хранилище? Вы можете сохранить последний tweet_id в переменной javascript и каждый раз проверять его на новый. Вы также можете использовать массив javascript для ведения журнала всех идентификаторов twet и сравнения нового с ним. –

+0

"* Насколько я знаю, вы не можете проверять строки против других строк в локальном хранилище *" - Почему бы и нет? Это будет хорошо. Вы уже пробовали? – Bergi

+0

@JaspalSingh: Чтобы сценарий по-прежнему работал, когда страница обновляется вручную, например - это была бы приятная функция – Bergi

ответ

1

здесь решение, основанное на мои комментарии выше

/* 
NOTE : allTweets will have to be populated with all the tweets ids on the page prior   
to being called in refreshTweets so that it does not trigger fake notifications 
*/ 

    var allTweets = Array(); 

    $(document).ready(function() { 

     $('.fancybox').fancybox(); 
     /* 
     * call ajax function and update latest 
     */   

     var refreshTweets = function() { 
      console.log("updating.."); 
      $.ajax({url:"tweets.php",success:function(result){ 
        tweets = result; 

        for(i=0;i<tweets.length;i++) { 

         //check if its a new tweet or not 
         if (allTweets[tweets[i][0].id_string] === undefined) { 
          allTweets[tweets[i][0].id_string] = 1;  
          //trigger notification here! 
         } 

         $("#latesttweet"+(i+1)).html(
         tweets[i][0].user.name + ": " + tweets[i][0].text 

        ); 
        } 

       }}); 

     } 
     refreshTweets(); 

     //set the time in milliseconds here for each refresh 
     setInterval(refreshTweets , 30000); //Interval 

    }); 
+0

Спасибо за это! Я отдам его сейчас и вернусь к тебе. Что касается вышеприведенной заметки, я не уверен, как я это добьюсь. - php в моем вопросе - это то, где извлекается JSON, который включает в себя все твиты, tweet_ids и т. Д. Только до тех пор, пока функция refreshTweets не выведет значения объекта в JSON. Итак, как я мог бы сделать примечание, которое вы указали выше?«Tweets = result» и for loop - это то, где значения для каждого пользователя твиттера выведены, поэтому не нужно ли это включать ранее в скрипт? – Tom

+0

Кроме того, не все пользователи должны установить таймер для обновления tweet_id в массиве. В противном случае он получит только tweet_id при первой загрузке страницы пользователем. Например, скажем, что с момента загрузки первой страницы появилось 5 новых твитов, этот скрипт будет работать для первого нового твита, но затем любые твиты после этого сценарий по-прежнему будет сравнивать последние tweet_id с первым твитом, а не с tweet_id предыдущего твита , Вы понимаете, что я имею в виду? – Tom

+0

@Tom: Нет, 'allTweets' хранит идентификаторы всех отображаемых твитов, а не только последние. – Bergi

0

Я хочу прокомментировать с другими, но я думаю, что я слишком новичок.

В любом случае, если вы не храните конфиденциальную информацию, вы можете хранить свои данные в JSON, которые могут быть быстро записаны и прочитаны PHP для файлов меньшего размера. Если вы храните много данных, вам может потребоваться сохранить значения в базе данных MySQL или что-то подобное.

Настройка базы данных JSON и баз данных MySQL, по-видимому, действительно хорошо документирована здесь.

Смежные вопросы