【问题标题】:SignalR: $.connection is undefinedSignalR:$.connection 未定义
【发布时间】:2012-06-24 17:31:22
【问题描述】:

我在 MVC4 应用程序中使用 Visual Studio 2012 Ultimate RC、SignalR 0.5.1 和 Jquery 1.7.2。

我看过:MVC4 SignalR "signalr/hubs" 501 Not Implemented Error

但这不影响我的问题(我使用 IIS Express 进行调试)。

当我尝试使用 SignalR 时,$.connection 变量未定义。我的服务器端代码:

[HubName("tenantHub")]
public class TenantHub : Hub
{
    ...
    void TenantChange(CrudAction action, Tenant tenant)
    {
        Clients.eventOccurred(action.ToString(), tenant);
    }
}

客户端:

$(function() { var test = $.connection.tenantHub; });

客户端 SignalR/hubs 被引用,我可以看到 JS 代码,它不会抛出任何错误。但是引用 $.connection 会抛出 Uncaught TypeError: Cannot read property 'tenantHub' of undefined。还尝试做默认的聊天示例,它给出了同样的错误。 SignalR 在 VS2012 中使用时是否不受支持,还是我只是愚蠢?

【问题讨论】:

  • 你试过在服务器上调试吗?有什么例外吗?你开始连接了吗? $.connection.hub.start();这就是我现在能想到的:(
  • 是的,我试过了,但是'connection'变量本身是未定义的。
  • 我觉得问题出在.js文件的位置,你输入jquery.signalR-0.5.1.min.jssignalr/hubs了吗?也许你应该尝试使用firebug 来调试它
  • jquery.signalR-0.5.1.min.jssignalr/hubs 被引用,没有抛出任何错误。

标签: signalr visual-studio-2012 .net-4.5


【解决方案1】:

尝试从 Global.asax.cs 中删除 BundleConfig.RegisterBundles(BundleTable.Bundles);,看看是否有帮助?

【讨论】:

  • 这对我有用!弄清楚为什么,默认情况下,MVC4 模板在布局文件的底部包含 jQuery(出乎意料,并且考虑到它在顶部包含modernizr 似乎很愚蠢)。所以我的页面包含 jquery 两次,这把一切都搞砸了。谢谢蒂姆 :)
  • 这正是我使用默认 MVC 4 模板时遇到的问题。谢谢!!
  • 实际上,它有帮助,但正确的做法是在脚本部分 @section scripts {} 中包含您的附加脚本,如果您想使用默认布局,或者更改布局以满足您的需要(顶部的脚本,布局中没有 jquery 等)
【解决方案2】:

尝试将[HubName("tenantHub")] 从您的班级中撤出。如果我那里有那些,我的就行不通了。还可以尝试将集线器放入项目根目录下名为 "Hubs" 的文件夹中。

【讨论】:

    【解决方案3】:

    这通常是由于两次加载 jQuery 造成的。通常我们习惯于在页脚中加载 jQuery。由于信号器抱怨并强制您在 signalr-x.js 之前包含 jQuery 库。

    您可以在 signalr-x.js 之前包含 jQuery,您可以在包含 jQuery 插件的页脚中执行类似的操作以避免加载两次:

    <script type="text/javascript">
        !window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>');
        !window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>');
    </script>
    

    希望这会有所帮助。 :)

    【讨论】:

    • 确实!大 +1 :) (虽然我的菜鸟错误..)
    【解决方案4】:

    我在 VS2012 RTM 中遇到了同样的问题。

    问题是我首先在 BundleConfig.cs 中添加了信号器,并希望它能够正常工作。 但是随后在浏览器中使用“查看源代码”时,我注意到 signalr.js 包含在 jquery.js 之前。 signalr.js 包含在页面顶部,jquery 包含在页面底部。

    在对 BundleConfig 进行了一番摆弄之后,在 jquery.js 之后包含了 signalr.js,现在 signalr 就像一个魅力一样工作!

    【讨论】:

      【解决方案5】:

      尝试将RouteTable.Routes.MapHubs(); 作为Application_Start() 的第一项放在Global.asax.cs

      我有一个sample code/project here

      【讨论】:

        【解决方案6】:

        如果这些都不适合您,请确保在最终的 html 源代码中,不仅对 SignalR 脚本的引用出现在 jQuery 之后,而且版本与您在脚本文件夹中的实际文件匹配。

        <script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 
        

        比如这个匹配 2.0.2 版本的 SignalR,如果你通过包升级 SignalR,那么你必须手动编辑这一行。

        【讨论】:

          【解决方案7】:

          我遇到了类似的问题,我的工作是在 Visual Studio 2010 调试中工作,但不是在 localhost(IIS7.5 Windows 7)上工作。我发现我在“signalr/hubs”的定义中有一个额外的斜线,我使用的是“/signalr/hubs”。我还为浏览器兼容性添加了 JSON 2 js 参考。注意声明 .js 的顺序很重要。

          <script src="Scripts/JSON2.js" type="text/javascript"></script>
          <script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
          <script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script>
          <script src="signalr/hubs" type="text/javascript"></script>
          <script type="text/javascript">
          

          为了发现这个问题,我按如下方式打开了日志记录,并在开发工具的控制台中查看了在本地主机上部署时出现的错误。

          // Logs errors to the browser dev 'f12' console
          $.connection.hub.logging = true;
          

          希望这对其他人有所帮助。我现在在多台 PC 上玩 chrome、IE9、10 - 多么棒的库!

          【讨论】:

            【解决方案8】:

            确保您没有重复的中心名称; [HubName("tenantHub")] - 即两个或多个使用相同名称装饰的 hub 类。

            【讨论】:

              【解决方案9】:

              与约翰相反,

              我必须在信号器/集线器声明中添加 /

              即。

              <script src="signalr/hubs" type="text/javascript"></script>
              

              成为

              <script src="/signalr/hubs" type="text/javascript"></script>
              

              【讨论】:

                猜你喜欢
                • 2012-06-27
                • 1970-01-01
                • 2012-09-05
                • 1970-01-01
                • 1970-01-01
                • 2021-04-07
                • 1970-01-01
                • 2012-11-08
                • 2019-06-17
                相关资源
                最近更新 更多