Подтвердить что ты не робот

JQuery 3 и SignalR 2.2.0

Я использую SignalR 2.2.0 в проекте MVC5. SignalR зависит от JQuery на стороне клиента.

Недавно выпущена новая версия JQuery, я обновил ее с Nuget, в частности, с версии 2.2.4 до 3.0.0.1, но затем SignalR перестала работать. Команда запуска "$.connection.hub" в javascript терпит неудачу. После долгой царапины головы я понижаю JQuery до 2.2.4, и все снова хорошо.

Я единственный, кто получил эту проблему? Существует ли какое-либо обходное решение?

Спасибо.

4b9b3361

Ответ 1

Наконец, была выпущена версия 2.2.1 SignalR, решая эту проблему. Спасибо за все комментарии.

Ответ 2

Вы должны отредактировать код 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; });

Ответ 3

Если вы все еще получаете такие ошибки после обновления до 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 в другом месте.