web-dev-qa-db-ja.com

jQuery 3およびSignalR 2.2.0

MVC5プロジェクトでSignalR 2.2.0を使用しています。 SignalRはクライアント側のJQueryに依存しています。

JQueryは最近新しいバージョンをリリースし、Nugetから、具体的にはバージョン2.2.4から3.0.0.1に更新しましたが、SignalRが機能しなくなりました。 JavaScriptの起動コマンド「$ .connection.hub」が失敗します。長い間頭を悩ませた後、私はJQueryを2.2.4にダウングレードし、すべてが再び問題なく動作しました。

この問題が発生するのは私だけですか?回避策はありますか?

ありがとう。

21
TNT

最後に、この問題を解決するSignalRのバージョン2.2.1がリリースされました。すべてのコメントをありがとう。

18
TNT

SignalRコードは自分で編集する必要があります。jquery3では、loadイベントのショートカットを削除しました。

重大な変更:.load()、. unload()、および.error()が削除されました

これらのメソッドはイベント操作のショートカットですが、いくつかのAPI制限がありました。 event .load()メソッドがajax .load()メソッドと競合しました。 DOMメソッドの定義方法が原因で、.error()メソッドをwindow.onerrorと共に使用できませんでした。これらの名前でイベントをアタッチする必要がある場合は、.on()メソッドを使用します。 $( "img")。load(fn)を$(img).on( "load"、fn)に変更します。

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

ファイルjquery.signalR-{version}.js

この行を更新する必要があります:

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

へ:

_pageWindow.on("load",function () { _pageLoaded = true; });
19
Quentin Roger

2.2.1およびjQuery 3.xに更新した後もこのようなエラーが発生する場合は、次に進んでください...

TypeError: Cannot read property 'client' of undefined

私と同じように、おそらく 動的に生成されたプロキシ を使用していて、/signalr/hubsファイルを確認したところ、プロキシが定義されていないことがわかりました。

 var proxies = {};

私が何も変更しなかったと尋ねるのを待ってください-彼らはどこに行きましたか

まあ、私と同じように、すべてのプロジェクトでsignalRを2.2.1にアップグレードするのを忘れていた可能性があり、異なるアセンブリで2.2.12.2.0の両方を使用しています。 (私は私のメインアプリとは異なるアセンブリでハブを定義しています)。

私がしなければならないことは、すべてのプロジェクトで最新のnugetパッケージバージョンがあり、すべてが機能することを確認することだけでした。再構築後に問題なく動作するはずです。 そうでない場合、これも役立つかもしれません。

また、他の場所で多くのjQueryを使用している場合は、ご自身で jQuery 3アップグレードガイド をお読みください。

0
Simon_Weaver