SignalR $.connection is undefined
SignalR $.connection is undefined
我承认,我不知道我在做什么。
我正在尝试学习如何使用 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库,它使用$。 并且该对象也始终未定义。
我只是在寻找任何可能的解释,说明我可能做错了什么。提前非常感谢。
我今天遇到了同样的问题。
您的回答为我指明了正确的方向,因为我对脚本加载进行了完全相同的设置。
我所有的脚本标签都按以下顺序放在页面顶部(头部)。
- 杰奎里
- 信号R /
- 信号器/集线器
- 我的脚本.js
当然,@Layout.cshtml 非常周到地在 <body>
标签的底部添加了@Scripts.Render("~/bundles/jquery")
。
正在发生的事情。
在此配置中,当页面加载时,它会按照指定的顺序加载 head 标记中的所有脚本。
所以它加载 JQuery,然后加载 SignalR,它设置$.connection
然后自动生成的中心脚本,设置$.connection.hubName
,然后是站点的自定义脚本。
此时,自定义代码将运行。但是您的代码在某些时候会等待body.onload
或document.onReady
,然后再访问$.connection
当此事件触发时,布局模板在正文标记末尾为您添加的脚本包也会下载并执行。这个捆绑包又有 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,因为要注册jquery,应该首先加载jquery。在 _Layout.cshtml 模板中,脚本按顺序加载
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
因此,在您的任何视图中,您都可以在脚本部分下加载信号器,这应该可以正常工作。
我遇到了同样的问题。对我来说,我已经在页面中包含了 jquery 2 次,后来在布局中包含了 jquery。删除了其中一个解决了问题。
希望对你有帮助
这发生在我身上,因为我在加载jquery.signalR-1.1.4.js
脚本之前动态加载了~/signalr/hubs
脚本。
动态加载时,不存在任何错误,但是如果我获取~/signalr/hubs
的输出并将其粘贴到我的 chrome 开发工具中,我会收到一条错误消息VM1047:18 Uncaught Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs.
at <anonymous>:18:15
at <anonymous>:300:2
- Jquery - table.row(tr) is undefined
- noty.js is returning undefined
- $routeParams is undefined
- Angular js $scope is Undefined
- $scope is coming as undefined
- Angular - $cookies is undefined
- TypeError: e is undefined - javascript
- “google.maps.MapTypeId is undefined”在FF 14中使用GMAP3时
- chrome.storage.local["mykey"] is undefined
- 回调在 Angular2/Firebase 中生成“TypeError: this is undefined”
- KendoWindow .visible(); is undefined?
- jQuery .forEach() 导致错误,“undefined is not a function”
- 使用“flickrnode”API时出现“TypeError: undefined is not a function”
- "undefined is not a function" onSuccessHandler
- 莫名其妙的“Undefined is not a function”错误 — 由“getElementsById”引起
- Angular js 在传递 promise 时$asyncValidator“Undefined is not a f
- undefined is not a function when evaluating 'this.batman
- “uncatch TypeError: undefined is not a function” 在使用 str.ind
- 谷歌地图API(使用gmapsjs), setCenter抛出“undefined is not a function”
- 在骨干应用视图中出现" Uncaught TypeError: undefined is not a function