2012-05-25 17 views
5

Jestem programistą stron internetowych. w moim skryptu użyj nagłówka(), aby ustawić "Transfer-Encoding: chunked". i opróżnij() na stronę. zostanie wydrukowany na stronie udostępnionej w czasie. działa poprawnie. , ale gdy używam jQuery.ajax(), aby zażądać this.it zawsze wypisz wszystko razem (chunked unuseful).Obsługa jquery Transfer-Encoding: chunked? jak

jak rozwiązać ten problem? korzystać z kodowania chunked w jQuery ajax?

+0

Hej, czy wreszcie rozwiązanie to? Jeśli tak, opublikuj tutaj –

+0

Utknąłem w dokładnie podobnym problemie –

Odpowiedz

11

Nie można użyć jquery.ajax do ciągłego czytania fragmentowanej odpowiedzi http. jquery ajax wywoła funkcję zwrotną sukcesu tylko wtedy, gdy połączenie zostanie przerwane. Powinieneś użyć wtyczki jquery this.

jeśli używasz PHP można użyć tego kodu:

<html> 
     <head> 
      <script src="jquery-1.4.4.js"></script> 
      <script src="jquery.stream-1.2.js"></script> 
      <script> 

       var println = function(string){ 
        $("#console").append(string+"<br />"); 
       } 

       $(document).ready(function(){ 



        $.stream("stream.php",{ 
         open:function(){ 
          println("opened"); 
         }, 
         message:function(event){ 
          println(event.data); 
         }, 
         error:function(){ 
          println("error"); 
         }, 
         close:function(){ 
          println("closed"); 
         } 
        }); 



       }); 
      </script> 
     </head> 
     <body> 


      <div id="console"></div> 

     </body> 
    </html> 

po stronie serwera:

stream.php

<?php 


    header('Content-Encoding', 'chunked'); 
    header('Transfer-Encoding', 'chunked'); 
    header('Content-Type', 'text/html'); 
    header('Connection', 'keep-alive'); 

    ob_flush(); 
    flush(); 

    echo("23123454645645646;"); 


    $p = ""; 
    for ($i=0; $i < 1024; $i++) { 
     $p .= " "; 
    }; 
    echo($p.";"); 



    for ($i = 0; $i < 10000; $i++) { 
     echo('6;string;'); 
     ob_flush(); 
     flush(); 
     sleep(2); 
    } 




?> 
+4

Projekt 'jquery.stream' został przeniesiony na github i zmieniono jego nazwę na Portal, ale Portal osiągnął koniec życia i został zaabsorbowany w Vibe, ale Vibe został przemianowany na Cettia . Idź do http://cettia.io – Stephan

+1

@Stephan, czy możesz proszę o zachowanie biblioteki? tylko nieliczni rozumieją znaczenie tej biblioteki. Czy możemy go umieścić w github.com i zmusić do zamrożenia, aby nikt nie mógł od 10 lat zmieniać nazwy i mylić społeczności? – YumYumYum

+2

@YumYumYum Cettia ma już opiekuna. Oto jego profil Github: https://github.com/flowersinthesand – Stephan

Powiązane problemy