2016-06-21 18 views
13

Uso SignalR 2.2.0 in un progetto MVC5. SignalR dipende da JQuery nel lato client.JQuery 3 e SignalR 2.2.0

JQuery ha recentemente rilasciato la nuova versione, l'ho aggiornata da Nuget, in particolare dalla versione 2.2.4 alla 3.0.0.1, ma poi SignalR ha smesso di funzionare. Il comando di avvio "$ .connection.hub" in javascript fallisce. Dopo un lungo periodo di razzolamenti, ho eseguito il downgrade di JQuery alla versione 2.2.4 e tutto va bene.

Sono l'unico a ricevere questo problema? C'è qualche soluzione?

Grazie.

risposta

9

Infine la versione 2.2.1 di SignalR era re affittato, risolvendo questo problema. Grazie per tutti i commenti.

+0

curiosamente nessuna menzione di jQuery 3 nelle note di rilascio, ma eccole qui: https://github.com/SignalR/SignalR/releases –

+0

guardando jquery.signalR-2.2.1.js. Trovo ancora jQuery.fn.unbind() per esempio. Non penso che SingalR 2.2.1 sia ancora completamente pronto per jquery 3 – gsharp

+0

La versione 2.2.2 sembra curare questo, è compatibile con Jquery 3.1.1 come viene. –

12

È necessario modificare il codice signalR da soli, in jQuery 3 hanno tolto la scorciatoia per l'evento di carico:

Rottura cambiamento: .load(), unload(), e .error() rimosso

Questi metodi sono scorciatoie per le operazioni di evento, ma presentavano diverse limitazioni API . Il metodo event .load() è in conflitto con il metodo ajax .load(). Il metodo .error() non può essere utilizzato con window.onerror a causa del modo in cui è definito il metodo DOM. Se è necessario allegare eventi con questi nomi, utilizzare il metodo .on(), ad es. cambia $ ("img"). carica (fn) in $ (img) .on ("carica", fn).

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

così nel file jquery.signalR-{version}.js:

è necessario aggiornare questa linea:

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

A:

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

Ha funzionato anche per me. –

+0

Gli sviluppatori SignalR devono apportare questa modifica ora. –

+0

Ho avuto questo problema nella versione 1.2.2 e questo ha funzionato per me. Grazie! – eaglei22

0

Se si sta ancora ricevendo errori di questo tipo dopo l'aggiornamento a 2.2.1 e jQuery 3.x allora continuate a leggere ...

TypeError: Cannot read property 'client' of undefined 

Come sto probabilmente si sta utilizzando il dynamically generated proxy, e controllato il vostro /signalr/hubs file e trovato che non hai alcun proxy definito.

var proxies = {}; 

Attendere si può chiedere Non ho cambiato niente - dove sono andati?

Beh, come me probabilmente erano in tanta fretta di aggiornare signalR a 2.2.1 che si è dimenticato di farlo in tutti i vostri progetti e ora si utilizza sia 2.2.1 e 2.2.0 in diverse assemblee. (Sto definendo i miei hub in un assembly diverso rispetto alla mia app principale).

Tutto quello che dovevo fare era assicurarsi di avere l'ultima versione del pacchetto nuget in ogni progetto e tutto funzionava. Dovrebbe funzionare bene dopo la ricostruzione.If not, this may also help.

Anche fare un favore a te stesso e leggere il jQuery 3 upgrade guide se si utilizza molto jQuery altrove.