1

我正在尝试利用服务器发送的事件来处理一些异步操作的客户端,我正在做服务器端。滚动到底部以查看最后一个问题。

我拥有的是一个需要全局搜索的网络应用程序。返回值可能很大并且需要一些时间,因为它们实际上被发送到 Web 服务,然后以 XML 形式返回。

我正在尝试使用服务器发送的事件(javascript:EventSource)来启用它。它只适用于一个事件,但如果我想做一堆不同的事件,它会有点奇怪,至少对我来说是这样。我是 SSE 的新手。

到目前为止,我已经这样做了:

var sse = new EventSource('testsse.aspx');

function init() {
            sse.onopen = function (e) {
                console.log(e.data);
            };

            sse.onmessage = function (e) {
//if data has been returned the "data:" field will not be empty so we know the server operation is complete. 
                if (e.data.length>0) {
                    $('#rgCcr').kendoGrid({
                        dataSource: JSON.parse(e.data)
                    });
                    sse.close();
                }
                    console.log("message: " + e.data);
            };

$(document).ready(function() {
    init();
});

在服务器上,我有一个构建 json 字符串的 aspx 页面。正如我所提到的,如果我只使用标准的“数据:我的消息\n\n”格式,它就会很好地工作。我需要做的是在那里获取更多信息。

SSE的规范说您可以指定要触发的事件。到目前为止,我无法让它发挥作用。

在我的 aspx 中,我正在构建这样的字符串:

json = string.Format("id:{0}\n event:myEvent\n data:{1}\n\n", id, ser.Serialize(ccrData));

我已经尝试创建一个自定义事件,但我不确定要将它绑定到什么才能捕获它。

在页面上,作为全局搜索的一部分,我正在搜索 5 个不同的区域。每个都在服务器上作为异步任务执行,完成后会将数据发送回客户端。一旦客户端检测到事件已提交数据,它将关闭侦听器并将数据结果添加到 kendo 网格。

如何使用 SSE 的事件字段来区分返回的内容?

4

1 回答 1

1

您可以尝试注册一个事件侦听器,而不是使用“onmessage”功能。这样您就可以选择收听特定的事件类型。

es = new EventSource('/events', withCredentials: true);

es.addEventListener("open", function (e) {
  alert("Connecting...");
});

es.addEventListener("error", function (e) {
  alert("Error");
});

es.addEventListener("myEvent", function (e) {
  alert("MyEvent");
  alert(e.data);
});

这里有很好的文档:http: //html5doctor.com/server-sent-events/

于 2013-10-31T04:18:33.847 回答