2012-02-15 39 views
5

tôi muốn truy cập dữ liệu AJAX trước khi yêu cầu kết thúc, một cách hiệu quả để thực hiện luồng loại như thế này:dữ liệu streaming qua ajax

ajax_request.send(); 
interval = setInterval(function() { 
    continueParsing(ajax_request.responseText); 
    if (download_complete) 
     clearInterval(interval); 
}, 64); 

Ngay bây giờ tôi có một thingy php để phá vỡ các yêu cầu thành những phần nhỏ hơn , nhưng tôi muốn mang nó đi một lần. Cách tốt nhất để làm điều này (tôi chỉ quan tâm đến Chrome và Firefox).

+0

câu hỏi tuyệt vời, tôi nghĩ rằng điều này làm việc với thông số kỹ thuật HTML5, nhưng tôi chắc chắn sẽ cố gắng tìm ra –

+0

loại dữ liệu nào được gửi từ PHP? –

Trả lời

6

Vâng, bắt đầu với một handler PHP như thế này:

$content = file_get_contents('http://pplware.sapo.pt/feed/'); 
for($i = 0; $i < 10; $i++){ 
    $content .= $content; 
} 
echo $content; 

và javascript như thế này:

var client = new XMLHttpRequest(); 
client.open('get', 'ajax.php'); 
client.send(); 
client.onprogress = function(){ 
    console.log(this.responseText.length);    
} 

tôi nhận được giao diện điều khiển này:

11183 
137415984 
1311572876 
1313769728 

như vậy, nó hoạt động .... tôi nghĩ bạn có thể tìm ra phần còn lại :)

+0

Tuyệt vời, cảm ơn! Tôi mặc dù tôi đã sử dụng responseText trước khi yêu cầu và trình duyệt khiển trách tôi. Tôi đoán onprogress là tất cả những gì tôi cần. (Tôi đang gửi dữ liệu nhị phân, nhưng nó xuất hiện dưới dạng một chuỗi). – Chris

2

Tốt nhất bạn nên sử dụng WebSockets để thực hiện loại điều này và có dự phòng thích hợp cho các trình duyệt cũ hơn (ví dụ dưới dạng bỏ phiếu dài AJAX).

Vì bạn đang sử dụng PHP, tìm kiếm google nhanh chóng đã bật dự án này - http://code.google.com/p/phpwebsocket/ có thể cung cấp cách đơn giản để thực hiện. Tôi không biết nếu nó có một dự phòng cho các công nghệ khác nếu trình duyệt không hỗ trợ websockets nhưng nếu nó không bạn có thể đặt socket.io-client trên đầu trang của nó và chỉ sử dụng dự án phpwebsocket để cung cấp lớp máy chủ của bạn .

+0

Ý tưởng tuyệt vời về ổ cắm! Tôi thậm chí không biết chúng tồn tại trong Javascript. Tuy nhiên, tôi nghĩ rằng ajax_request.onprogress là tất cả những gì tôi cần cho mục đích của mình. – Chris

Các vấn đề liên quan