SignalR:$ .connection未定义

Bas*_*Bas 21 .net-4.5 signalr visual-studio-2012

我在MVC4应用程序中使用Visual Studio 2012 Ultimate RC,SignalR 0.5.1和Jquery 1.7.2.

我看过:MVC4 SignalR"signalr/hubs"501未实现错误

但它不会影响我的问题(我使用IIS Express进行调试).

当我尝试使用SignalR时,$ .connection变量是未定义的.我的服务器端代码:

[HubName("tenantHub")]
public class TenantHub : Hub
{
    ...
    void TenantChange(CrudAction action, Tenant tenant)
    {
        Clients.eventOccurred(action.ToString(), tenant);
    }
}
Run Code Online (Sandbox Code Playgroud)

客户端:

$(function() { var test = $.connection.tenantHub; });
Run Code Online (Sandbox Code Playgroud)

SignalR/hubs正在引用客户端,我可以看到JS代码,它不会抛出任何错误.但是引用$ .connection会抛出一个Uncaught TypeError: Cannot read property 'tenantHub' of undefined.还试图做默认的聊天示例,它给出了同样的错误.在VS2012中使用时是不支持SignalR还是我只是愚蠢?

小智 26

尝试BundleConfig.RegisterBundles(BundleTable.Bundles);Global.asax.cs中删除,看看是否有帮助?

  • 这对我有用!找出原因,默认情况下MVC4模板在布局文件的底部包含jQuery(出乎意料的是,考虑到它在顶部包含了modernizr,看起来很愚蠢).所以我的页面包括两次jquery,这搞砸了一切.谢谢你,谢谢:) (12认同)

Eag*_*ail 9

试着[HubName("tenantHub")]脱掉你的课.如果那里有那些,我的工作就行不通.还可以尝试将集线器放入"Hubs"项目根目录中的文件夹中.


Abh*_*der 5

这通常是由于加载jQuery两次造成的.通常我们习惯于在页脚中加载jQuery.由于signalr抱怨并强迫您在signalr-x.js之前包含jQuery库.

你可以在signalr-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>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.:)