Tôi sẽ phát triển một khuôn khổ cho lập trình sao chổi, và tôi không thể sử dụng Web Sockets, hoặc Server-Sent Events (vì hỗ trợ trình duyệt thực sự rất tệ). Vì vậy, tôi cần phải giữ cho kết nối HTTP còn sống, và gửi dữ liệu chunked trở lại cho khách hàng.Phép thuật đằng sau Lightstreamer là gì?
Tuy nhiên, vấn đề hiện mình là bạn nhận được vào công việc:
- Sử dụng XMLHttpRequest là không thể, do thực tế rằng IE sẽ không cung cấp cho bạn
xhr.responseText
trong khixhr.readyState
là 3. - Một hidden
iframe
không thể hữu ích, bởi vì trình duyệt hiển thị trình tải trong khi tôi gửi dữ liệu lại cho khách hàng. - Tôi đã thử gửi lại tệp JavaScript cho máy khách, gửi các lệnh thực thi hàm mỗi lần, nhưng các trình duyệt sẽ không thực thi JavaScript cho đến khi nó được tải hoàn toàn.
Tuy nhiên, khi tôi xem Lightstreamer demo page, tôi thấy rằng nó gửi tệp JavaScript trở lại từng khách hàng và mỗi bước gửi một hàm đến hàm và chức năng đó được thực thi (tôi có thể 't làm phần này). Có vẻ như Lightstreamer sử dụng AJAX, vì yêu cầu đơn giản xuất hiện trong tab giao diện điều khiển của Firebug, nhưng nó hoạt động giống như một sự quyến rũ trong IE.
Tôi đã cố gắng sử dụng mọi trường tiêu đề HTTP mà họ đã đặt trên yêu cầu của họ và không có kết quả nào. Tôi cũng đã cố gắng sử dụng HTTP Post thay vì HTTP Get, nhưng vẫn không có kết quả.
Tôi đã đọc gần như hơn 20 bài báo về cách thực hiện sao chổi, nhưng không ai of'em xuất hiện để giải quyết những vấn đề tôi có:
- Làm thế nào để làm cho nó qua trình duyệt?
- Cách nhận thông báo khi dữ liệu mới đến từ máy chủ (tôi nên móc vào sự kiện nào)?
- Làm cách nào để trang của tôi xuất hiện như được tải hoàn toàn cho người dùng (cách triển khai trang đó để trình duyệt không hiển thị hoạt động tải)?
Mọi người có thể giúp bạn không? Tôi nghĩ rằng có một mẹo nhỏ hoặc mẹo nhỏ mà tôi không biết ở đây để dán tất cả các khái niệm lại với nhau. Có ai biết những gì lightstreamer làm để vượt qua những vấn đề này?
Vâng, tôi đã thử nó, nhưng nó chỉ hoạt động nếu bạn đặt loại MIME thành * text/html *. Nói cách khác, bạn nên yêu cầu một tài liệu HTML khác. Nếu bạn đặt phản hồi thành ** application/javascript ** hoặc ** application/x-javascript ** hoặc ** text/javascript ** nó sẽ không hoạt động. Ngoài ra nó không giải quyết được vấn đề của tôi. Tôi có thể sử dụng XMLHttpRequest để yêu cầu một tệp HTML chứa các đoạn mã JavaScript. Tuy nhiên, nó không hoạt động trong IE. Tôi có thể sử dụng 'iframe', nhưng nó cho thấy bộ nạp. Lightstreamer hoạt động ở khắp mọi nơi và không hiển thị dấu hiệu của trình tải. –
Cũng xin lưu ý rằng nếu tôi sử dụng 'XMLHttpRequest' để tải tệp HTML bao giờ có chứa thông báo ' 'Đoạn mã JavaScript, chúng sẽ không được thực thi. Ý tôi là, trình duyệt thực hiện mã JavaScript bên trong các thẻ JavaScript khi chúng đến, nhưng chỉ trong các yêu cầu bình thường, không phải yêu cầu ajax. –