首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在完整的ajax导航网页中使用SignalR?

问在完整的ajax导航网页中使用SignalR?
EN

Stack Overflow用户
提问于 2014-08-18 13:55:57
回答 1查看 260关注 0票数 0

我正试着适应SignalR。但我需要一个黄金点才能完全理解它。我感觉离抓捕只有一步之遥.

我的密码:

Javascript:

代码语言:javascript
复制
            $(function() {
                var connection = $.connection.signalR;

                connection.client.broadcastTotalOnline = function (totalOnlineUser) {
                    $('#TotalOnline').html(totalOnlineUser);
                };

                $.connection.hub.start().done(function() {
                    console.log("Connection Started!");
                });
            });

C#:

代码语言:javascript
复制
public class SignalR : Hub
{
    public void SendTotalOnline()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<SignalR>();
        using (var dbContextx = new db_Oyun())
        {
            while (true)
            {
                int totalOnlineUser = dbContextx.tbl_User.Count(x => x.Online);
                context.Clients.All.broadcastTotalOnline(totalOnlineUser);
                Thread.Sleep(1000);
            }
        }
    }
}

上面的代码是完美的,但是当我用AJAX调用新页面到内部内容时。然后我想使用相同的集线器,相同的对象和相同的集线器,不同的对象。不起作用。没有调用警报;但是当我删除上面的signalR代码时,在代码下工作。

代码语言:javascript
复制
        $(function () {
            var connection = $.connection.signalR;
            connection.client.broadcastTotalOnline = function (totalOnlineUser) {
                alert(totalOnlineUser);
            };
        });
EN

回答 1

Stack Overflow用户

发布于 2014-08-19 22:41:18

启动SignalR连接时,它将检查$.connection.signalR.client对象,以查看是否添加了回调。如果在连接启动后使用常规赋值添加回调,SignalR将不会接收该回调。

若要在连接启动后添加回调,可以使用$.connection.signalR.client.on

代码语言:javascript
复制
$.connection.signalR.client.on("broadcastTotalOnline", function (totalOnlineUser) {
    alert(totalOnlineUser);
});

如果您试图在启动连接之前将回调添加到集线器,那么即使使用.on也无法工作。

在启动连接之前,必须至少有一个回调连接到计划使用的每个集线器上。您设置的回调可以是一个从未调用的虚拟回调。添加回调只是向SignalR表示您对源自该集线器的消息感兴趣的方式。

在您的情况下,您不需要添加任何虚拟回调,因为在启动连接之前已经附加到broadcastTotalOnline。

如果要删除回调,可以使用$.connection.signalR.client.off对先前添加的函数进行引用:

代码语言:javascript
复制
var callback = function (totalOnlineUser) {
    alert(totalOnlineUser);
};

$.connection.signalR.client.on("broadcastTotalOnline", callback);
$.connection.signalR.client.off("broadcastTotalOnline", callback);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25365084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档