Javascript 服务器通过MVC发送事件,同时获取结果和错误

Javascript 服务器通过MVC发送事件,同时获取结果和错误,javascript,asp.net,asp.net-mvc,html,server-sent-events,Javascript,Asp.net,Asp.net Mvc,Html,Server Sent Events,我试图获得SSE技术,但解决不了一个问题。始终在消息和错误上触发两个事件。我收到了有效日期和错误消息。为什么会发生这种情况以及如何解决?如何延长连接“polltransport请求”的生存时间 这里是服务器端 public class HomeController : Controller { public ActionResult Message() { JavaScriptSerialize

我试图获得SSE技术,但解决不了一个问题。始终在消息和错误上触发两个事件。我收到了有效日期和错误消息。为什么会发生这种情况以及如何解决?如何延长连接“polltransport请求”的生存时间

这里是服务器端

  public class HomeController : Controller
        {
            public ActionResult Message() 
            {
                JavaScriptSerializer ser = new JavaScriptSerializer();
                var serializedObject = ser.Serialize(new { item = "fuck", message = "hello" });
                var sb = new StringBuilder();
                sb.AppendFormat("data: {0}\n\n", serializedObject);

                return Content(sb.ToString(), "text/event-stream");
            }

            public ActionResult SEEIndex()
            {
                return View();
            }
        }
这里是客户端javascript

$(document).ready(function () {

    var serverSentEvents = new window.EventSource('/Home/Message');  //home/message   /api/Event

    serverSentEvents.onmessage = function (e) {
        //$("#messages").append(e.data.item + '<br />');
        var data = JSON.parse(e.data);
        console.log('Yes! We get it, here is you data', data.item);
    };

    serverSentEvents.onerror = function (e) {
        console.log('error');
    };

    if (typeof (window.EventSource) !== "undefined") {
        console.log('Yes! Server-sent events support!');
    }
    else {
        console.log('Sorry! No server-sent events support..');
    }

});
$(文档).ready(函数(){
var serverSentEvents=new window.EventSource('/Home/Message');//Home/Message/api/Event
serverSentEvents.onmessage=函数(e){
//$(“#消息”).append(e.data.item+”
); var data=JSON.parse(e.data); log('是的!我们知道了,这是您的数据',data.item); }; serverSentEvents.OneError=函数(e){ console.log('error'); }; if(typeof(window.EventSource)!=“未定义”){ log('Yes!服务器发送事件支持!'); } 否则{ log('抱歉!没有服务器发送事件支持..'); } });

这里是google chrome浏览器中的屏幕和选项卡

您的服务器端代码需要不断写入
响应
对象,而不是返回结果:

using System.Threading;

public class HomeController : Controller {
    public ActionResult SEEIndex() {
        return View();
    }
    public void Message() {
        Response.ContentType = "text/event-stream";
        do {
            Response.Write("data: understandably\n");
            Response.Write("data: frustrated\n");
            Response.Write("\n");     //double newline signals the end of an event
            Response.Flush();
            Thread.Sleep(2000);       //wait 2 seconds before writing again
        } while (true)
    }
}
返回结果将关闭连接,从而触发
EventSource.onerror


有关更多详细信息,请参阅。

您遇到的错误是什么?@Shashank Chaturved