【问题标题】:SignalR: Uncaught TypeError: Cannot read property 'chat' of undefinedSignalR:未捕获的类型错误:无法读取未定义的属性“聊天”
【发布时间】:2013-12-09 18:45:20
【问题描述】:

带有引导程序的 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

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

【问题讨论】:

  • 只是表示连接(在 $.connection 中)未定义。尝试其他方式来引用这个连接对象(比如 window.connection 如果它的全局变量)
  • @jsjunkie 我不知道我认为它在 SignalR API 中的某个地方
  • 在您的浏览器地址栏中键入 javascript:alert($.connection) 如果没有警告“未定义”,则在编写 javascript 函数之前检查您是否正在导入 js 文件。如果你得到“未定义”然后检查stackoverflow.com/questions/16310554/…
  • @jsjunkie 它说未定义
  • 我还有一个指向您的问题的链接。希望对你有帮助stackoverflow.com/questions/11179644/…

标签: javascript asp.net signalr


【解决方案1】:

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

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

【讨论】:

  • 如果同一版本的 jQuery 被引用两次也会出现这个问题。在较新的模板中,jQuery 引用已经出现在 _Layout.cshtml 的底部,很容易被忽略。解决方案是将此引用移动到 _Layout.cshtml 的顶部(不创建新的)
  • @Lars Hoppner 我已经设置了断点并且 $.connection 正在初始化,但是一旦调试停止,它就会变得未定义。它适用于一种布局,但不适用于另一种布局。
猜你喜欢
  • 2021-12-22
  • 2015-01-06
  • 2017-07-26
  • 2019-02-26
  • 2021-12-25
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多