我正在尝试利用服务器发送的事件来处理一些异步操作的客户端,我正在做服务器端。滚动到底部以查看最后一个问题。
我拥有的是一个需要全局搜索的网络应用程序。返回值可能很大并且需要一些时间,因为它们实际上被发送到 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 的事件字段来区分返回的内容?