Signalr 信号器:$。连接未定义
我正在MVC4应用程序中使用Visual Studio 2012 Ultimate RC、SignalR 0.5.1和Jquery 1.7.2 我看过: 但它不会影响我的问题(我正在使用IIS Express进行调试) 当我尝试使用signar时,$.connection变量未定义。我的服务器端代码:Signalr 信号器:$。连接未定义,signalr,visual-studio-2012,.net-4.5,Signalr,Visual Studio 2012,.net 4.5,我正在MVC4应用程序中使用Visual Studio 2012 Ultimate RC、SignalR 0.5.1和Jquery 1.7.2 我看过: 但它不会影响我的问题(我正在使用IIS Express进行调试) 当我尝试使用signar时,$.connection变量未定义。我的服务器端代码: [HubName("tenantHub")] public class TenantHub : Hub { ... void TenantChange(CrudAction act
[HubName("tenantHub")]
public class TenantHub : Hub
{
...
void TenantChange(CrudAction action, Tenant tenant)
{
Clients.eventOccurred(action.ToString(), tenant);
}
}
客户端:
$(function() { var test = $.connection.tenantHub; });
客户端
signar/hubs
正在被引用,我可以看到JS代码,它不会抛出任何错误。但是引用$.connection会引发一个未捕获的类型错误:无法读取未定义的
的属性“tenantHub”。还尝试了默认的聊天示例,它给出了相同的错误。在VS2012中使用SignalR时是不受支持的还是我太愚蠢了 尝试删除BundleConfig.RegisterBundles(BundleTable.Bundles)从Global.asax.cs下载code>,看看这是否有帮助?试着把[HubName(“tenathub”)]
从你的课堂上撤下来。如果我在那里的话,我的就不行了。还可以尝试将集线器放入项目根目录下名为“集线器”的文件夹。我在VS2012 RTM中也遇到了同样的问题
问题是,我首先在BundleConfig.cs中添加了signal,并期望它能够正常工作。
但是在浏览器中使用“查看源代码”时,我注意到signalr.js包含在jquery.js之前。signalr.js包含在页面顶部,jquery包含在页面底部
在对BundleConfig进行了一些修改之后,jquery.js之后包含了signalr.js,现在signalr就像一个魔咒一样工作 尝试放置RouteTable.Routes.MapHubs()
作为Global.asax.cs
我有一个这通常是由于加载jQuery两次而导致的。通常我们习惯于在页脚中加载jQuery。因为signer抱怨并强迫您在signer-x.js之前包含jQuery库
您可以在signal-x.js之前包含jQuery,也可以在页脚中包含jQuery插件以避免加载两次:
<script type="text/javascript">
!window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>');
!window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>');
</script>
!window.jQuery和document.write(“”);
!window.jQuery和document.write(“”);
希望这有帮助。:) 我有一个类似的问题,我的是在visual studio 2010调试中工作,但不是在本地主机(IIS7.5 windows 7)上。我发现“信号器/集线器”的定义中有一个额外的斜杠,我使用的是“/signer/hubs”。我还添加了JSON 2 js参考以实现浏览器兼容性。注意声明.js的顺序很重要
<script src="Scripts/JSON2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
希望这对其他人有帮助。我现在正在多台PC上玩chrome、IE9、10,这是一个多么棒的库啊 确保没有重复的中心名称;[HubName(“tenantHub”)]-这是两个或多个用相同名称修饰的集线器类。如果这些都不适用于您,请确保在最终html源中,不仅在jQuery之后显示对信号器脚本的引用,而且版本与脚本文件夹中的实际文件相匹配
<script src="~/Scripts/jquery.signalR-2.0.2.js"></script>
例如,这一行与SignalR的2.0.2版本相匹配,如果您通过软件包升级SignalR,则必须手动编辑这一行。与John相反
我必须在信号机/集线器声明中添加一个/
即
变成
<script src="/signalr/hubs" type="text/javascript"></script>
您是否尝试在服务器上调试?有例外吗?你接通了吗<代码>$.connection.hub.start()代码>这就是我现在所能想到的:(是的,我试过了,但是'connection'变量本身没有定义。我认为问题来自.js文件的位置,您是否输入了jquery.signalR-0.5.1.min.js
和signalR/hubs
?也许您应该尝试使用firebug
jquery.signalR-0.5.1.min.js
和signalR/hubs来调试它。)正在被引用,没有抛出任何错误。这对我来说很有效!找出了原因,默认情况下MVC4模板在布局文件的底部包含jQuery(出乎意料,考虑到顶部包含Modernizer,这似乎很愚蠢)。因此,我的页面包含了两次jQuery,这一切都搞砸了。谢谢Thiem:)这正是我使用默认MVC4模板时遇到的问题。谢谢!!事实上,这很有帮助,但正确的方法是在脚本部分@section scripts{}
中包含您的其他脚本,如果您想使用默认布局,或者更改布局以满足您的需要(脚本在顶部,布局中没有jquery等)确实如此!大+1:)(尽管新手犯了我的错误…)
<script src="signalr/hubs" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>