J'utilise SignalR 2.2.0 dans un projet MVC5. SignalR dépend de JQuery côté client.
JQuery a récemment publié une nouvelle version. Je l'ai mise à jour à partir de Nuget, plus précisément de la version 2.2.4 à 3.0.0.1, mais SignalR a cessé de fonctionner. La commande de démarrage "$ .connection.hub" en javascript échoue . Après une longue période de réflexion, j'ai rétrogradé JQuery vers la version 2.2.4 et tout va bien à nouveau.
Suis-je le seul à avoir ce problème? Il y a une solution de contournement?
Merci.
Enfin, la version 2.2.1 de SignalR est sortie, résolvant ce problème. Merci pour tous les commentaires.
Vous devez éditer le code signalR vous-même. Dans jquery 3, le raccourci pour l'événement de chargement a été supprimé:
Changement radical: .load (), .unload () et .error () enlevés
Ces méthodes sont des raccourcis pour les opérations sur les événements, mais avaient plusieurs API. limites. La méthode event .load () était en conflit avec ajax .load () méthode. La méthode .error () n'a pas pu être utilisée avec window.onerror à cause de la façon dont la méthode DOM est définie. Si vous avez besoin d'attacher événements par ces noms, utilisez la méthode .on (), par exemple. changement $ ("img"). load (fn) à $ (img) .on ("load", fn).
https://jquery.com/upgrade-guide/3.0/
donc dans le fichier jquery.signalR-{version}.js
:
vous devez mettre à jour cette ligne:
_pageWindow.load(function () { _pageLoaded = true; });
À :
_pageWindow.on("load",function () { _pageLoaded = true; });
Si vous obtenez toujours des erreurs comme celle-ci après la mise à jour vers 2.2.1
et jQuery 3.x, lisez la suite ...
TypeError: Cannot read property 'client' of undefined
Comme vous le savez, vous utilisez probablement le proxy généré dynamiquement , et vous avez vérifié votre fichier /signalr/hubs
et constaté que vous n’avez défini aucun proxy.
var proxies = {};
Attends tu peux demander que je n’ai rien changé - où sont-ils allés?
Eh bien, comme moi, vous étiez probablement si pressé de mettre à niveau signalR en 2.2.1
que vous avez oublié de le faire dans tous vos projets et que vous utilisez maintenant 2.2.1
et 2.2.0
dans différents assemblys. (Je définis mes hubs dans une assemblée différente de celle de mon application principale).
Tout ce que je devais faire était de m'assurer d'avoir la dernière version du paquet de nuget dans chaque projet et tout fonctionnait bien. Devrait bien fonctionner après la reconstruction. Sinon, cela peut aussi aider.
Rendez-vous également service en lisant le guide de mise à niveau jQuery 3 si vous utilisez beaucoup jQuery ailleurs.