Ответ 1
Наконец, была выпущена версия 2.2.1 SignalR, решая эту проблему. Спасибо за все комментарии.
Я использую SignalR 2.2.0 в проекте MVC5. SignalR зависит от JQuery на стороне клиента.
Недавно выпущена новая версия JQuery, я обновил ее с Nuget, в частности, с версии 2.2.4 до 3.0.0.1, но затем SignalR перестала работать. Команда запуска "$.connection.hub" в javascript терпит неудачу. После долгой царапины головы я понижаю JQuery до 2.2.4, и все снова хорошо.
Я единственный, кто получил эту проблему? Существует ли какое-либо обходное решение?
Спасибо.
Наконец, была выпущена версия 2.2.1 SignalR, решая эту проблему. Спасибо за все комментарии.
Вы должны отредактировать код signalR самостоятельно. В jquery 3 они удалили ярлык для события загрузки:
Ломающиеся изменения:.load(),.unload() и .error() удалены
Эти методы являются ярлыками для событийных операций, но имеют несколько API ограничения. Метод eventload() противоречил ajax.load() метод. Метод .error() не может использоваться с window.onerror из-за способа определения метода DOM. Если вам нужно прикрепить событий по этим именам, используйте метод .on(), например. изменение $( "img" ). load (fn) до $(img).on( "load", fn).
https://jquery.com/upgrade-guide/3.0/
поэтому в файле jquery.signalR-{version}.js
:
вы должны обновить эту строку:
_pageWindow.load(function () { _pageLoaded = true; });
To:
_pageWindow.on("load",function () { _pageLoaded = true; });
Если вы все еще получаете такие ошибки после обновления до 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 3, если вы используете много jQuery в другом месте.