2012-11-03 19 views
10

tôi cố gắng sử dụng đối tượng EventSource với một ví dụ nhỏTôi không thể nhìn thấy sự kiện HTML5 EventSource với phương pháp onmessage trong Chrome

Khách hàng bên, tôi có trang này với kịch bản:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <title>Welcome!</title> 
    </head> 
    <body> 
     <div id="result"></div> 
     <script type="text/javascript"> 
     var sse = new EventSource('event-source.php'); 

     sse.onmessage = function(event) { 
      console.log(event.data); 
      document.getElementById("result").innerHTML+=event.data + "<br>"; 
     } 

     sse.onerror = function(event) { 
     console.log(event); 
     } 

     </script> 
    </body> 
</html> 

kịch bản gọi sự kiện nguồn .php trên máy chủ. Đây là event-source.php:

<?php 
header('Content-type: text/event-stream'); 
echo 'data: '.time().PHP_EOL; 

Khi tôi thử cấu hình này trên Firefox, phương thức "onmessage" cũng được gọi, nhưng không phải với Chrome. Khi tôi đặt "onerror" phương pháp, có vẻ như nó được gọi là nhưng tôi không thể thấy nguyên nhân lỗi.

Tôi nên làm gì?

+0

thử nó trong chrome phiên bản 22, nó làm việc. – igorw

+0

Không có trên hệ thống của tôi, tôi chạy trên Ubuntu 12.04, tôi đã thử với Ubuntu 12.04, Chromium 20 và Chrome 22. Ngoài ra, onmessage et onerror được gọi cả trên Firefox, nhưng dữ liệu Sự kiện được hiển thị chính xác ... – mika34

+0

hoạt động tốt Chrome 32.0.1700.102 m – Kamil

Trả lời

0

Trong onmessage bạn đang gọi thuộc tính mong muốn đối tượng, tại sao bạn không làm như vậy trong onerror?
Tôi nghĩ rằng onerror của bạn sẽ giống như thế này:

sse.onerror = function(event) { 
     console.log(event.message); 
    } 

Giải thích:https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events - liên kết này cho biết: "Khi sự cố xảy ra (...), một sự kiện lỗi được tạo ra."

Vì vậy, khi xử lý lỗi tùy chỉnh bạn nên tìm hiểu về cấu trúc ErrorEvent :) Nó giống như sau:

  1. ErrorEvent. tin nhắn (Chỉ đọc) Là DOMString có chứa thông báo lỗi có thể đọc được mô tả sự cố.
  2. ErrorEvent. tên tệp (Chỉ đọc) Là DOMString có chứa tên của tệp tập lệnh trong đó xảy ra lỗi.
  3. ErrorEvent. lineno (Chỉ đọc) Là số nguyên chứa dòng số tệp tập lệnh mà lỗi xảy ra.
  4. ErrorEvent. cột (chỉ đọc) Là số nguyên chứa cột số tệp tập lệnh mà lỗi xảy ra.
  5. ErrorEvent. lỗi (Chỉ đọc) Là một đối tượng JavaScript có nghĩa là liên quan đến sự kiện.

Thông tin thêm và nguồn: https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent

+0

Hãy bình luận khi bạn downvote, mọi người đều học hỏi, luôn luôn .... :) –

0

KHÁCH HÀNG

<script> 
if(typeof(EventSource) !== "undefined") { 
var source = new EventSource("/html/demo_sse.php"); 
source.onopen = function() { 
document.getElementById("myH1").innerHTML = "Getting server updates"; 
}; 
source.onmessage = function(event) { 
document.getElementById("myDIV").innerHTML += event.data + "<br>"; 
};   
} else { 
document.getElementById("myDIV").innerHTML = "Sorry, your browser does not support server-sent events..."; 
} 
</script> 

MÁY CHỦ

<?php 
    header('Content-Type: text/event-stream'); 
    header('Cache-Control: no-cache'); 

    $time = date('r'); 
    echo "data: The server time is: {$time}\n\n"; 
    flush(); 
    ?> 
Các vấn đề liên quan