SignalR $ .connection未定义

我承认,我不知道我在做什么。

我正在尝试学习如何使用SignalR,我几乎逐字地在线跟踪各种样本,我无法粘贴$ .connection未定义。 我正在使用MVC 4.0并尝试使用nuget下载的signalR js文件或来自示例项目的文件。 这些是我的脚本参考。

@Scripts.Render("~/Scripts/jquery-1.7.2.min.js") @Scripts.Render("~/Scripts/knockout-2.0.0.js") @Scripts.Render("~/Scripts/jquery.signalR.js") @Scripts.Render("~/signalr/hubs") 

脚本似乎加载 – 我甚至在它们开始时发出警报,但是$ .connection总是未定义的。

在一个奇怪的事件中,我有一个不同的项目,我正在尝试使用不同的jQuery库,它使用$。 并且该对象始终未定义。

我只是想找出我可能做错的任何可能的解释。 首先十分感谢。

我今天遇到了同样的问题。

你的回答指出了我正确的方向,因为我有完全相同的脚本加载设置。

我按照以下顺序将所有脚本标记放在页面顶部(头部)。

  • JQuery的
  • SignalR
  • / signalr /集线器
  • 我-的script.js

当然,@ Layout.cshtml非常周到,可以在标签的底部添加@Scripts.Render("~/bundles/jquery")

这是正在发生的事情。

在此配置中,当页面加载时,它按照指定的顺序加载head标记中的所有脚本。

所以它加载JQuery,然后是SignalR,它设置$.connection然后自动生成的集线器脚本设置$.connection.hubName ,然后设置网站的自定义脚本。

此时,您的自定义代码将运行。 但是你的代码在某些时候,在访问$.connection之前等待body.onloaddocument.onReady

当此事件触发时,布局模板在body标记末尾为您添加的脚本包也会下载并执行。 这个包再次有了jquery库….它重置了$上的所有SignalR设置,现在你的$.connection已经不再定义了。

如何解决它

轻松修复,确保不加载JQuery两次,一次在SignalR之前,一次在SignalR之后。 我将所有脚本移动到捆绑后加载并修复了问题。 这里的最佳做法是使用模板提供的“脚本”部分。

 @section scripts{ @*/* load your scripts here. You can exclude jQuery, coz it's already in the template */ *@ } 

所以这根本不是SignalR错误……

那是我生命中的2个小时……我永远不会回来……

希望这可以帮助。

我解决了这个问题。 我知道我做了什么,但我不知道为什么它确实有效。

我在_Layout.cshtml视图的顶部引用了主jquery库(版本1.7.2),但没有引用任何其他jquery脚本。 我注意到默认情况下它在布局视图中加载

 @Scripts.Render("~/bundles/jquery") 

在视图的底部,脚本部分位于该部分下方。

 @RenderSection("scripts", required:false) 

我进一步更改了我的脚本引用,如上所示,并将上面问题中显示的脚本引用放在一个

 @section scripts { @Scripts.Render("~/Scripts/jquery.signalR-0.5.1.js") @Scripts.Render("~/Scripts/jquery.color.js") @Scripts.Render("~/signalr/hubs") @Scripts.Render("~/Scripts/blasht.signalr.js") } 

在我的视图上包装,以便在加载包之后包含它们。 我假设我没有加载所有必要的jquery,因为它现在有效。

现在,如果我能弄清楚这是如何适用于我的其他项目。

这是有效的原因是因为加载了javascript文件的顺序。 如果你在加载jquery之前尝试加载jquery.signalR-0.5.1.js,那么你将面对$ .connection undefined因为要注册这个jquery应该先加载。 在_Layout.cshtml模板中,脚本按顺序加载

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

因此,在您的任何视图中,您可以在脚本部分下加载signalr,这应该可以正常工作。

我有同样的问题。 对我来说,我在页面中包含了2次jquery,后来又在布局中包含了jquery。 删除其中一个修复了问题。

希望能帮助到你

这发生在我身上,因为我在加载jquery.signalR-1.1.4.js脚本之前动态加载了~/signalr/hubs脚本。

当动态加载时,没有出现错误,但是如果我将~/signalr/hubs的输出粘贴到我的chrome dev工具中,我收到错误消息VM1047:18 Uncaught Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs. at :18:15 at :300:2 VM1047:18 Uncaught Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs. at :18:15 at :300:2