2

私はasp.netプロジェクトでサーバー送信イベント(Html5)に取り組んでいます。サーバーからデータを受信し、DIV 内に表示するため、コードは非常に単純です。この問題は、Eventsource が常に呼び出されない FireFox でコードを実行した場合にのみ発生します。クロムでコードをテストすると、コードは正常に機能し、必要に応じて無限のリクエストを受け取りました。私のコードは:

<script type="text/javascript">
$(function()
{
if (window.EventSource == undefined)
    {
        $('#targetDiv').html('Your Browser Cant support Server Side Event');
        return;
    }
var source = new EventSource('GetData.aspx?userid=jalal');

    source.onopen = function(event){$('#targetDiv').append("Connection opened... <br/>");};
    source.onerror = function(event)
    {
        if (event.eventPhase == EventSource.CLOSED)
            $('#targetDiv').append("Connection Closed!<br/>");

        source.addEventListener("new-message", function (event) {});
    };
    source.onmessage = function(event){$('#targetDiv').append(event.data + '<br/>')};
});
</script>

<div id="targetDiv">

</div>

およびページ GetData.aspx.cs のコード ビハインド

protected void Page_Load(object sender, EventArgs e)
{
    DateTime StartDate = DateTime.Now;
    Response.ContentType = "text/event-stream";
    Response.Expires = -1;
    Response.CacheControl = "no-cache";

    Response.Write("data: " + Request.QueryString["userid"] + " " + DateTime.Now.ToString() + "\n\n ");
    Response.Flush();
}

上記のコードの何が問題なのか、またはこれが Firefox でのみ発生した理由を教えてください。

4

2 に答える 2

0

私はPHPサーバー側の解決策を見つけました。これは、サーバーに少なくとも1秒スリープさせる必要があるということです。

Response.Flush();
sleep(1);
于 2014-01-02T05:39:44.843 に答える
0

EventSource を適切に使用するには、サーバー側のコードでResponse.

protected void Page_Load(object sender, EventArgs e) {
    DateTime StartDate = DateTime.Now;
    Response.ContentType = "text/event-stream";
    do {
        Response.Write("data: " + Request.QueryString["userid"] + " " + DateTime.Now.ToString() + "\n\n ");
        Response.Flush();
        Thread.Sleep(1000);
    } while (true);
}
于 2016-02-29T19:12:12.747 に答える