JQuery 3和SignalR 2.2.0

我在MVC5项目中使用SignalR 2.2.0。 SignalR在客户端依赖于JQuery。

JQuery最近发布了新版本,我从Nuget更新了它,特别是从2.2.4版到3.0.0.1版,但是然后SignalR停止了工作。 javascript中的启动命令“$ .connection.hub”失败。 经过很长一段时间的努力,我将JQuery降级到2.2.4并且一切都很好。

我是唯一一个遇到这个问题的人吗? 有什么解决方法吗?

谢谢。

您必须自己编辑signalR代码,在jquery 3中,他们删除了load事件的快捷方式:

中断更改:.load(),. uninstall()和.error()已删除

这些方法是事件操作的快捷方式,但有几个API限制。 事件.load()方法与ajax .load()方法冲突。 由于DOM方法的定义方式,.error()方法无法与window.onerror一起使用。 如果需要通过这些名称附加事件,请使用.on()方法,例如将$(“img”)。load(fn)更改为$(img).on(“load”,fn)。

https://jquery.com/upgrade-guide/3.0/

所以在文件jquery.signalR-{version}.js

你必须更新这一行:

 _pageWindow.load(function () { _pageLoaded = true; }); 

至 :

 _pageWindow.on("load",function () { _pageLoaded = true; }); 

最后发布了SignalR的2.2.1版,解决了这个问题。 感谢所有评论。

如果在更新到2.2.1和jQuery 3.x之后仍然遇到这样的错误,请继续阅读…

 TypeError: Cannot read property 'client' of undefined 

就像我一样,你可能正在使用动态生成的代理 ,并检查了你的/signalr/hubs文件,发现你没有定义任何代理。

  var proxies = {}; 

等等,你可能会问我没有改变任何东西 – 他们去了哪里?

好吧,像我一样,你可能急于将signalR升级到2.2.1 ,你忘了在所有项目中都这样做,现在你在不同的程序集中使用2.2.12.2.0 。 (我在与主应用程序不同的程序集中定义我的集线器)。

我需要做的就是确保我在每个项目中都有最新的nuget软件包版本,并且一切正常。 重建后应该可以正常工作。 如果没有,这也可能有所帮助。

如果你在其他地方使用了很多jQuery,也请自己帮忙并阅读jQuery 3升级指南 。