JQuery Ajax отображать данные, как они поступают - PullRequest
9 голосов
/ 23 мая 2011

Допустим, у меня есть страница, которая медленно возвращает кучу данных с течением времени. Мол, это например:

<?php

$iTime = time();

while(time()-$iTime < 10 ) {
    echo "Hello world";
    echo str_repeat( ' ', 1024 ) . "<br />";
    flush( );
    sleep(3);
}

?>

Я хочу показать все данные по мере их поступления. Поэтому он будет обновляться "вживую" Как, например, после отправки строки данных это позволит мне проанализировать данные и отобразить их?

Есть ли способ сделать это через JQuery? Я прошу прощения, если это было задано ранее

Спасибо за ваше время! :)

Ответы [ 3 ]

2 голосов
/ 23 мая 2011

Конечно, создание длинного опроса в стиле кометы довольно тривиально:

PHP:

<?php
    $data = null;
    while ($data ==  null)
    {
         $data = find_data($_REQUEST['last_update']); // This is up to you.
                    // Although you may do a DB query, that sort of breaks the model
                    // from a scalability perspective.  The point in this kind of
                    // operation is to rely on external data to know that it needs to 
                    // update users, so although you can keep your data in a DB, you'll
                    // want a secondary storage mechanism to keep from polling it.
                    //
                    // Conceptually, you'd put new information into this data storage
                    // system when something changes (like new data from an external
                    // source.  The data storage system could check to see if a file
                    // has been updated or if there is new data in something like a
                    // memcached key.  You'd then consume the data or otherwise 
                    // mark it as used.
         sleep(5);
    }
    echo json_encode($data);

JavaScript:

 function setListener()
 {
      $.ajax({
           url: 'updater.php',
       dataType: 'json',
       success: function(data, status, xhr) 
           {
              // do something, such as write out the data somewhere.
              setListener();
           },
       error: function()
           {
               setTimeout(setListener,10000);
           }
       });
 }
1 голос
/ 23 мая 2011

взгляните на плагин ajax-http-stream jquery . Он расширяет вызовы jquery ajax для приема потоковых данных кометы из бэкэнда и вызывает функцию OnDataRecieved при поступлении новых данных.

0 голосов
/ 23 мая 2011

Что ж, вы нарушаете ограничения самого протокола HTTP, так что это не столько jQuery, сколько веб-программирование. Если вам действительно нужен push в реальном времени, тогда вам подойдет другой протокол, например XMPP (который используют несколько крупных игроков, например, Google Wave).

Однако, с jQuery я бы использовал обычный опрос для ресурсов с малой задержкой и низким энергопотреблением для выполнения работы (легко создавать статические ресурсы, которые правильно используют HTTP-кэширование, полагаясь на REST , чтобы помочь вам ), так что-то сродни;

  1. setTimeout ('myPoll ("http://my_feed")', 500);
  2. my_feed с использованием HTTP-кэширования в качестве статического средства (возможно, для каждого пользователя, если необходимо)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...