SignalR:$■连接是未定义(SignalR: $.connection is undefine

2019-06-25 17:58发布

我在MVC4应用程序中使用的Visual Studio 2012 RC最终,SignalR 0.5.1和jQuery 1.7.2。

我看过: MVC4 SignalR“signalr /集线器” 501未执行错误

不过,这并不影响我的问题(我使用IIS Express来调试)。

当我尝试利用SignalR的$■连接变量是不确定的。 我的服务器端代码:

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

客户端:

$(function() { var test = $.connection.tenantHub; });

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

Answer 1:

尝试采取[HubName("tenantHub")]把你的类。 如果我有那些​​有煤矿是行不通的。 也可以尝试把你的集线器到一个文件夹,名为"Hubs" ,在你的项目的根目录。



Answer 2:

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



Answer 3:

这通常是我们造成的,由于装载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>

希望这可以帮助。 :)



Answer 4:

我在VS2012 RTM同样的问题。

问题是,我第一次在BundleConfig.cs添加signalr和期望它只是工作。 但随后我注意到signalr.js是jquery.js和之前包含在浏览器中使用“查看源文件”。 signalr.js被列入页面顶部jQuery是包含在页面的底部。

一些与BundleConfig signalr.js摆弄被列入的jquery.js后后,现在signalr工程就像一个魅力!



Answer 5:

尝试把RouteTable.Routes.MapHubs(); 如在第一个项目Application_Start()Global.asax.cs

我有一个示例代码/项目在这里



Answer 6:

如果这些对你的工作的,请确保您的最终HTML源不仅参考SignalR脚本的jQuery后出现,而且该版本,你在你的脚本文件夹中有实际的文件相匹配。

<script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 

例如,这一个版本2.0.2 SignalR的匹配,如果您通过包升级SignalR那么你就必须手动编辑这一行。



Answer 7:

我有一个类似的问题,我的是工作形式的Visual Studio 2010的调试,但不是在本地主机(IIS7.5的Windows 7)。 我发现,我原来在定义“signalr /中心”,我是用“/ signalr /集线器”额外的斜线。 我还添加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">

为了找到这个问题我开启记录如下,看着在开发者工具控制台查看错误在本地主机上部署时。

// Logs errors to the browser dev 'f12' console
$.connection.hub.logging = true;

希望这可以帮助别人。 我与镀铬打,IE9,10多台PC上现在 - 什么一个伟大的图书馆!



Answer 8:

确保你没有重复的名字枢纽; [HubName(“tenantHub”)] - 这是两个或更多个集线器类装饰有相同的名称。



Answer 9:

在相反的约翰,

我不得不添加/到signalr /集线器声明

即。

<script src="signalr/hubs" type="text/javascript"></script>

成为

<script src="/signalr/hubs" type="text/javascript"></script>


文章来源: SignalR: $.connection is undefined