JQuery 3 和 SignalR 2.2.0
JQuery 3 and 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 他们删除了加载事件的快捷方式:
Breaking change: .load(), .unload(), and .error() removed
These methods are shortcuts for event operations, but had several API
limitations. The event .load() method conflicted with the ajax .load()
method. The .error() method could not be used with window.onerror
because of the way the DOM method is defined. If you need to attach
events by these names, use the .on() method, e.g. change
$("img").load(fn) to $(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
就像我一样,您可能正在使用 dynamically generated proxy,并且您检查了 /signalr/hubs
文件,发现您没有定义任何代理。
var proxies = {};
等等,你可能会问我什么都没改变 - 他们去哪儿了?
好吧,您可能像我一样急于将 signalR 升级到 2.2.1
,以至于您忘记在所有项目中都这样做,现在您同时使用 2.2.1
和 [=16] =] 在不同的组件中。 (我在与主应用程序不同的程序集中定义我的集线器)。
我需要做的就是确保我在每个项目中都有最新的 nuget 包版本并且一切正常。重建后应该可以正常工作。 If not, this may also help.
如果您在其他地方用得太多 jQuery,也请自己阅读 jQuery 3 upgrade guide。
我在 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 他们删除了加载事件的快捷方式:
Breaking change: .load(), .unload(), and .error() removed
These methods are shortcuts for event operations, but had several API limitations. The event .load() method conflicted with the ajax .load() method. The .error() method could not be used with window.onerror because of the way the DOM method is defined. If you need to attach events by these names, use the .on() method, e.g. change $("img").load(fn) to $(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
就像我一样,您可能正在使用 dynamically generated proxy,并且您检查了 /signalr/hubs
文件,发现您没有定义任何代理。
var proxies = {};
等等,你可能会问我什么都没改变 - 他们去哪儿了?
好吧,您可能像我一样急于将 signalR 升级到 2.2.1
,以至于您忘记在所有项目中都这样做,现在您同时使用 2.2.1
和 [=16] =] 在不同的组件中。 (我在与主应用程序不同的程序集中定义我的集线器)。
我需要做的就是确保我在每个项目中都有最新的 nuget 包版本并且一切正常。重建后应该可以正常工作。 If not, this may also help.
如果您在其他地方用得太多 jQuery,也请自己阅读 jQuery 3 upgrade guide。