jQuery Ajax exibir dados como se trata

9

Digamos que eu tenha uma página que retorne um monte de dados lentamente ao longo do tempo. Por exemplo:

<?php

$iTime = time();

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

?>

Quero mostrar todos os dados à medida que chegam. Por isso, atualizará "ao vivo". Como, uma vez que uma linha de dados é enviada, ela me permite analisar os dados e exibi-los?

Existe uma maneira de fazer isso via jquery? Peço desculpas se isso já foi solicitado anteriormente

Obrigado pelo seu tempo! :)

    
por dab 23.05.2011 в 07:17
fonte

3 respostas

2

É claro que construir uma pesquisa longa com estilo de cometa básico é bem trivial:

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);
           }
       });
 }
    
por John Green 23.05.2011 / 07:40
fonte
1

Dê uma olhada no plugin ajax-http-stream jquery . Ele estende as chamadas jquery ajax para aceitar dados do estilo cometa que estão sendo transmitidos do backend e chamará uma função OnDataRecieved quando novos dados chegarem.

    
por pthurlow 23.05.2011 / 07:26
fonte
0

Bem, você está atingindo as limitações do próprio protocolo HTTP, portanto, isso é menos do que o jQuery e mais da programação da web. Se você realmente precisa de push em tempo real, então um protocolo diferente é mais adequado, como XMPP (que vários grandes jogadores usam, como o Google Wave).

No entanto, com o jQuery, usaria pesquisas normais em recursos de baixa latência e baixo consumo de energia para fazer o trabalho (é fácil criar recursos estáticos que usem o cache HTTP corretamente, contando com REST para guiá-lo), algo parecido com;

  1. setTimeout ('myPoll ("http: // my_feed")', 500);
  2. my_feed usando o armazenamento em cache HTTP como um meio estático (talvez por usuário, se necessário)
por AlexanderJohannesen 23.05.2011 / 07:27
fonte