2013-10-29 50 views
0

我想利用服务器发送的事件来处理客户端的一些异步操作即时通讯服务器端。滚动到底部以查看最终问题。服务器发送事件的自定义事件

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

我想使用服务器发送的事件(javascript:EventSource)来启用此功能。它只适用于一个事件,但如果我想要做一堆不同的事件,它会变得有点奇怪,至少对我而言。我是上交所新手。

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

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”格式,我的工作效果很好。我需要做的是在那里获得更多信息。

spec for SSE表示您可以指定要触发的事件。我不能让这个工作到目前为止。

在我的aspx我建立的字符串是这样的:

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

我曾尝试创建一个自定义事件,但我不知道怎么做才能抓住它绑定到。

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

如何使用SSE的事件字段来区分什么会回来?

+0

不是一个答案,但http://signalr.net/不是可以解决问题了吗? – Rudy

回答

0

而不是使用“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/