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.1
和2.2.0
。 (我在与主应用程序不同的程序集中定义我的集线器)。
我需要做的就是确保我在每个项目中都有最新的nuget软件包版本,并且一切正常。 重建后应该可以正常工作。 如果没有,这也可能有所帮助。
如果你在其他地方使用了很多jQuery,也请自己帮忙并阅读jQuery 3升级指南 。