SignalR:未捕获的TypeError:无法读取未定义的属性“chat”

时间:2013-12-02 09:27:21

标签: javascript asp.net signalr

带引导程序的VS 2013 WebForms模板。我有

<script src="/Scripts/jquery-2.0.3.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.signalR-2.0.0.min.js" type="text/javascript"></script>
<script type="text/javascript" src="/signalr/hubs"></script>

(用于试用signalr/hubsResolveClientUrl("~/signalr/hubs")等...)

<script type="text/javascript">
    $(function () {
        // Proxy created on the fly connection
        var chat = $.connection.chat;

我曾经尝试过各种各样的变种,并且习惯于搜索很多关于这个问题,但现在仍然找不到解决方案。当我检查加载的页面源并单击signalr/hubs时,我可以看到代理已加载到那里,我也可以在那里看到聊天。

但我仍然收到Uncaught TypeError: Cannot read property 'chat' of undefined

  • 我该如何调试?
  • 为什么会发生这种情况?

1 个答案:

答案 0 :(得分:7)

如果未设置$.connection,则jquery.signalR - * .min.js中的SignalR初始化代码未运行或至少未按预期完成。可能的原因可能是页面上包含多个jQuery版本(VS模板添加引用,因此如果您手动添加另一个,则可能是问题)。在这种情况下,SignalR自身设置的window.$实例只是被第二个jQuery初始化脚本替换,该脚本再次设置window.$。 如果不是这样,您应该尝试用未分化的版本替换缩小的SignalR脚本。然后在代码的开头设置断点(例如,在匿名函数中使用“use strict”的第一行),以及在$.connection = $.signalR = signalR;或类似的行(朝向末尾)的行。

如果两者都没有被击中,那么根本就找不到脚本。如果第一个被击中,但第二个被击中,则还有一些其他问题 - 您可以从那里向后追踪它。这可能是您创建Hub或其他配置问题的一个问题。