2016-06-21 11 views
13

Używam SignalR 2.2.0 w projekcie MVC5. SignalR zależy od JQuery po stronie klienta.JQuery 3 i SignalR 2.2.0

JQuery niedawno wydała nową wersję, zaktualizowałem ją z Nuget, konkretnie z wersji 2.2.4 do 3.0.0.1, ale SignalR przestał działać. Uruchomienie polecenia "$ .connection.hub" w javascript nie powiedzie się. Po długim drapaniu głowy zmieniłem JQuery na 2.2.4 i wszystko jest w porządku.

Czy jestem jedynym dostawcą tego problemu? Czy istnieje jakieś obejście?

Dzięki.

Odpowiedz

9

Finally wersję 2.2.1 SignalR był ponownie wynajęty, rozwiązujący ten problem. Dzięki za wszystkie komentarze.

+0

Co ciekawe, nie ma wzmianki o jQuery 3 w uwagach do wydania, ale tutaj są one tak: https://github.com/SignalR/SignalR/releases –

+0

patrząc na jquery.signalR-2.2.1.js. Nadal znajduję na przykład jQuery.fn.unbind(). Nie sądzę, że singalR 2.2.1 jest jeszcze w pełni gotowy na jquery 3 – gsharp

+0

Wersja 2.2.2 wydaje się to leczyć, jest kompatybilna z Jquery 3.1.1, jak to jest. –

12

Musisz edytować kod signalR przez siebie, w jQuery 3 usunięta one skrót do zdarzenia Load:

Przełamując zmiany: .load(), .unload() i .error() usuwa

Te metody to skróty do obsługi zdarzeń, ale mają kilka ograniczeń API . Metoda event .load() kolidowała z metodą ajax .load() . Metody .error() nie można używać z window.onerror ze względu na sposób zdefiniowania metody DOM. Jeśli chcesz dołączyć zdarzenia o tych nazwach, użyj metody .on(), np. zmień $ ("img"). load (fn) na $ (img) .on ("load", fn).

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

więc w pliku jquery.signalR-{version}.js:

należy zaktualizować ten wiersz:

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

Do:

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

Pracowałem także dla mnie. –

+0

Programiści SignalR muszą teraz dokonać tej zmiany. –

+0

Miałem ten problem w wersji 1.2.2 i to działało dla mnie. dzięki! – eaglei22

0

Jeśli nadal się błędy jak ten po aktualizacji do 2.2.1 i jQuery 3.x to czytaj dalej ...

TypeError: Cannot read property 'client' of undefined 

jak ja jesteś prawdopodobnie przy użyciu dynamically generated proxy i można sprawdzić swoją /signalr/hubs plik i stwierdził, że nie masz zdefiniowanych żadnych serwerów proxy.

var proxies = {}; 

Czekaj, możesz zapytać Nie zmieniłem niczego - gdzie oni poszli?

No, jak ja zapewne były w takim pośpiechu, aby uaktualnić signalR do 2.2.1 że zapomniał to zrobić we wszystkich swoich projektach, a teraz używasz zarówno 2.2.1 i 2.2.0 w różnych zespołach. (Definiuję moje koncentratory w innym zestawie niż moja główna aplikacja).

Wszystko, co musiałem zrobić, to upewnić się, że mam najnowszą wersję pakietu nuget w każdym projekcie i wszystko działało. Powinien działać dobrze po przebudowie.If not, this may also help.

Zrób sobie przysługę i przeczytaj jQuery 3 upgrade guide, jeśli używasz jQuery gdzie indziej.