【问题标题】:$.connection is undefined + signalR 0.5.3 + MVC4$.connection 未定义 + signalR 0.5.3 + MVC4
【发布时间】:2012-09-05 22:46:36
【问题描述】:

在粘贴两个小时后一直在努力解决这个错误..

TypeError: $.connection is undefined
[Break On This Error]   

var chatHubClient = $.connection.chatHub;

这是我的 Chat.cs(位于控制器文件夹中 - 我猜这是我做错了,但我找不到任何关于放置它的位置或如何路由它的文档)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SignalR.Hubs;

namespace SingalrTest.Controllers
{
    public class Chat
    {
        private readonly static Lazy<Chat> _instance = new Lazy<Chat>(() => new Chat());

        public static Chat Instance
        { get { return _instance.Value; } }
    }

    [HubName("chatHub")]
    public class ChatHub : Hub
    {
        private readonly int TimeoutInSeconds = 30;
        private readonly Chat _chat;

        public ChatHub() : this(Chat.Instance) { }

        private ChatHub(Chat chat)
        {
            this._chat = chat;
        }

        public void Join(string channelName)
        {
            System.Diagnostics.Debug.WriteLine("Someone joined " + channelName);
        }
    }
}

最后,.. 可能 _Layout.cs.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title - My ASP.NET MVC Application</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />

        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
        @Scripts.Render("~/Scripts/jquery-1.8.1.js")
        @Scripts.Render("~/Scripts/jquery.signalR-0.5.3.js")
        @Scripts.Render("~/signalr/hubs")

        <script type="text/javascript">
            $(document).ready(function () {
                // var chatHubClient = jQuery.connection.chatHub;
                var chatHubClient = $.connection.chatHub;

                $.connection.chatHub.start(function () {
                    chatHubClient.join('TEST');
                });
            });
        </script>
    </head>
    <body>
    ...
    </body>
</html>

如果我访问 /signalr/hubs,我可以看到源是正确生成的。那我错过了什么?

【问题讨论】:

  • 我也遇到了同样的问题。出于某种原因,在 $.ready 事件发生时没有定义 $.connection。我通过内联而不是在就绪事件上运行我的代码来修复它......我不知道它为什么会消失......

标签: jquery asp.net-mvc signalr


【解决方案1】:

你可能已经继续前进了......

但这是解决方案。

你的所有脚本都以正确的顺序排列在 head 标签中。但是 Visual Studio 模板中的 _Layout.cshtml 在 body 标记的末尾有以下几行。

@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)

这个包有 jQuery 库,它在加载时会覆盖 $ 对象。因此,SignalR 在此设置上的任何“东西”现在都被覆盖并且无法访问。

只需在您的页面中使用以下内容。

@section scripts {
    @* Load your scripts here. (and remove jQuery, coz it's already loaded) *@
}

希望这会有所帮助。

【讨论】:

  • jQuery 在加载时是否会被正确捆绑?我宁愿让捆绑器将 jQuery 作为捆绑包的一部分加载,然后重新运行 signalR 的东西。
  • 是的。您只需加载 SignalR。并确保在 jQuery 之后加载它。 (脚本部分在加载 jQuery 之后运行。在 中的脚本在默认配置中运行之前。)
【解决方案2】:

根据this,对于0.5.3版本,你必须改变连接语法:

var connection = $.hubConnection();

或将流量定向到辅助服务器

var connection = $.hubConnection("http://localhost:58416/");

连接到集线器:

var hub = connection.createProxy('your_hub_name');

发送和接收消息时还有一些变化

希望有帮助

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多