【问题标题】:Using SignalR in full ajax navigated web pages?在完整的 ajax 导航网页中使用 SignalR?
【发布时间】:2014-08-20 06:46:50
【问题描述】:

我正在努力让自己适应 SignalR。 但我需要一个金点才能完全理解它。感觉离抢夺还有一步之遥……

我的代码:

Javascript:

            $(function() {
                var connection = $.connection.signalR;

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

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

C#:

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 代码时,在代码工作下。

        $(function () {
            var connection = $.connection.signalR;
            connection.client.broadcastTotalOnline = function (totalOnlineUser) {
                alert(totalOnlineUser);
            };
        });

【问题讨论】:

    标签: javascript jquery ajax signalr


    【解决方案1】:

    当您启动 SignalR 连接时,它会检查 $.connection.signalR.client 对象以查看您是否添加了任何回调。如果您在连接开始后使用正常分配添加回调,SignalR 将不会接收该回调。

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

    $.connection.signalR.client.on("broadcastTotalOnline", function (totalOnlineUser) {
        alert(totalOnlineUser);
    });
    

    如果您尝试向集线器添加回调,但在开始连接之前您还没有回调,那么即使使用 .on 也不起作用。

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

    您不需要在您的案例中添加任何虚拟回调,因为您在开始连接之前已经附加到 broadcastTotalOnline

    如果你想删除回调,你可以使用$.connection.signalR.client.off 引用你之前添加的函数:

    var callback = function (totalOnlineUser) {
        alert(totalOnlineUser);
    };
    
    $.connection.signalR.client.on("broadcastTotalOnline", callback);
    $.connection.signalR.client.off("broadcastTotalOnline", callback);
    

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 2012-04-06
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2013-08-06
      相关资源
      最近更新 更多