【问题标题】:Callback on client does not get triggered with SignalRSignalR 不会触发客户端上的回调
【发布时间】:2015-06-15 09:57:28
【问题描述】:

我目前正在加速使用 SignalR,并尝试使用我对 SignalR 的非常基本的了解来构建一个非常基本的消息通知系统,但我无法在提交后让消息返回。

我已经阅读了许多关于该主题的博客,最基本的是有一个 VOID 方法,该方法接受一个字符串值,然后通过将其附加到客户端上下文将其传回,但是,这不起作用,因为 onReceiveNotification() 在 JS 调试器中总是未定义?

我错过了什么

notificationhub.cs

[HubName("notificationHub")]
public class NotificationHub : Hub
{

    public override System.Threading.Tasks.Task OnConnected()
    {
        return base.OnConnected();
    }

    public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
    {
        return base.OnDisconnected(stopCalled);
    }

    public override System.Threading.Tasks.Task OnReconnected()
    {
        return base.OnReconnected();
    }

    [HubMethodName("sendNotifications")]
    public void SendNotifications(string message)
    {
        Clients.All.onRecieveNotification(string.Format("{0} {1}", message, DateTime.Now.ToString()));
    }
}

message.html 页面

<div>
    <input type="text" id="messageinput" />
    <button id="notifybutton">Send Message</button>
</div>

<script src="Scripts/jquery-2.1.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="signalr/hubs"></script>
<script type="text/javascript">
    jQuery(document).ready(function ($)
    {
        var $hub = $.connection.notificationHub;
        $.connection.hub.start();

        $(document).on("click", "#notifybutton", {}, function (e)
        {
            e.preventDefault();
            var $message = $("#messageinput").val();
            $hub.server.sendNotifications($message);
        });
    });
</script>

display.html

<div>
    <ul id="messages"></ul>
</div>

<script src="Scripts/jquery-2.1.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="signalr/hubs"></script>
<script type="text/javascript">
    jQuery(document).ready(function ($)
    {
        var $hub = $.connection.notificationHub;

        $hub.onRecieveNotification = function (message)
        {
            $("#message").append($("<li></li>", { text: message }));
        }

        $.connection.hub.start();
    });
</script>

【问题讨论】:

  • $hub.onRecieveNotification 是否未定义,即使它在 $.connection.hub.start(); 之后?
  • 请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该”!
  • @Artem 我用 .client 进行了尝试,发现显示的开始从未触发,不知道为什么,在新的 HTML 文件中重新编写了相同的代码并且它工作。谢谢

标签: javascript c# asp.net signalr


【解决方案1】:

您似乎缺少client

   $hub.client.onRecieveNotification = function (message)
    {
        $("#message").append($("<li></li>", { text: message }));
    }

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多