Dan*_*Jr. 29 javascript asp.net-mvc jquery signalr
我承认,我不知道我在做什么.
我正在尝试学习如何使用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")
Run Code Online (Sandbox Code Playgroud)
脚本似乎加载 - 我甚至在它们开始时发出警报,但是$ .connection总是未定义的.
在一个奇怪的事件中,我有一个不同的项目,我正在尝试使用不同的jQuery库,它使用$.并且该对象始终未定义.
我只是想找出我可能做错的任何可能的解释.首先十分感谢.
Mad*_*han 60
我今天遇到了同样的问题.
你的回答指出了我正确的方向,因为我有完全相同的脚本加载设置.
我按照以下顺序将所有脚本标记放在页面顶部(头部).
当然,@ Layout.cshtml是如此周到,可以添加@Scripts.Render("~/bundles/jquery")
到<body>
标签的底部.
这是正在发生的事情.
在此配置中,当页面加载时,它按照指定的顺序加载head标记中的所有脚本.
所以它加载JQuery,然后是SignalR,然后设置$.connection
自动生成的集线器脚本$.connection.hubName
,然后设置站点的自定义脚本.
此时,您的自定义代码将运行.但是你的代码在某个时刻,等待body.onload
或document.onReady
访问之前$.connection
当此事件触发时,布局模板在body标记末尾为您添加的脚本包也会下载并执行.这个包再次有了jquery库....它会重置SignalR设置的所有内容$
,现在你$.connection
不再定义了.
如何解决它
轻松修复,确保不加载JQuery两次,一次在SignalR之前,一次在SignalR之后.我将所有脚本移动到捆绑后加载并修复了问题.这里的最佳做法是使用模板提供的"脚本"部分.
@section scripts{
@*/* load your scripts here. You can exclude jQuery,
coz it's already in the template */ *@
}
Run Code Online (Sandbox Code Playgroud)
所以这根本不是SignalR错误......
那是我生命中的2个小时......我永远不会回来......
希望这可以帮助.
Dan*_*Jr. 10
我解决了这个问题.我知道我做了什么,但我不知道为什么它确实有效.
我在_Layout.cshtml视图的顶部引用了主jquery库(版本1.7.2),但没有引用任何其他jquery脚本.我注意到默认情况下它在布局视图中加载
@Scripts.Render("~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud)
在视图的底部,脚本部分位于该部分下方.
@RenderSection("scripts", required:false)
Run Code Online (Sandbox Code Playgroud)
我进一步更改了我的脚本引用,如上所示,并将上面问题中显示的脚本引用放在一个
@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")
}
Run Code Online (Sandbox Code Playgroud)
我的视图上的包装器,以便在加载包后包含它们.我假设我没有加载所有必要的jquery,因为它现在有效.
现在,如果我能弄清楚这是如何适用于我的其他项目.