web-dev-qa-db-ja.com

SignalR:$。connectionは未定義です

MVC4アプリケーションでVisualStudio 2012 Ultimate RC、SignalR 0.5.1、およびJquery1.7.2を使用しています。

私は見ました: MVC4 SignalR "signalr/hubs" 501 Not Implemented Error

しかし、それは私の問題には影響しません(私はIIS Expressを使用してデバッグしています)。

SignalRを利用しようとすると、$。connection変数が定義されていません。私のサーバーサイドコード:

[HubName("tenantHub")]
public class TenantHub : Hub
{
    ...
    void TenantChange(CrudAction action, Tenant tenant)
    {
        Clients.eventOccurred(action.ToString(), tenant);
    }
}

クライアント側:

$(function() { var test = $.connection.tenantHub; });

クライアント側のSignalR/hubsが参照されており、JSコードを確認できますが、エラーはスローされません。ただし、$。connectionを参照すると、Uncaught TypeError: Cannot read property 'tenantHub' of undefinedがスローされます。また、デフォルトのチャットの例を実行しようとすると、同じエラーが発生します。 VS2012で使用する場合、SignalRはサポートされていませんか、それとも私は愚かですか?

20
Bas

クラスから[HubName("tenantHub")]を削除してみてください。私がそこにそれらを持っていたら、私のものは機能しませんでした。また、プロジェクトのルートにある"Hubs"というフォルダーにハブを配置してみてください。

9
EagleHail

Global.asax.csからBundleConfig.RegisterBundles(BundleTable.Bundles);を削除してみて、それが役立つかどうかを確認してください。

26
user1502389

これは通常、jQueryを2回ロードしたことが原因で発生しました。通常、私たちはフッターにjQueryをロードする習慣があります。 Signalrが文句を言って、signalr-x.jsの前にjQueryライブラリを含めるように強制するため。

Signalr-x.jsの前にjQueryを含めることができます。また、jQueryプラグインを含めるフッターで次のようなことを行って、2回ロードしないようにすることができます。

<script type="text/javascript">
    !window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>');
    !window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>');
</script>

お役に立てれば。 :)

5

VS2012RTMでも同じ問題が発生しました。

問題は、最初にBundleConfig.csにSignalrを追加し、それが正常に機能することを期待していたことでした。しかし、ブラウザで「ソースの表示」を使用すると、jquery.jsの前にsignalr.jsが含まれていることに気付きました。 signalr.jsはページの上部に含まれ、jqueryはページの下部に含まれていました。

BundleConfigをいじった後、jquery.jsの後にsignalr.jsが含まれ、今ではsignalrが魅力のように機能します。

3
Joep Grooten

_Global.asax.cs_のRouteTable.Routes.MapHubs();の最初の項目としてApplication_Start()を配置してみてください

私は サンプルコード/プロジェクトはこちら

2
jun estevez

これらのいずれも機能しない場合は、最終的なhtmlソースで、SignalRスクリプトへの参照がjQueryの後に表示されるだけでなく、バ​​ージョンがスクリプトフォルダーにある実際のファイルと一致することを確認してください。

<script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 

たとえば、これはSignalRの2.0.2バージョンと一致します。パッケージを介してSignalRをアップグレードする場合は、この行を手動で編集する必要があります。

1
Luis Ferrao

ハブ名が重複していないことを確認してください。 [HubName( "tenantHub")]-同じ名前で装飾された2つ以上のハブクラスです。

0
Tebo

私も同様の問題を抱えていました。私はVisualStudio 2010デバッグから作業していましたが、ローカルホスト(IIS7.5 Windows 7)では機能していませんでした。 「signalr/hubs」の定義に余分なスラッシュがあることがわかりました。「/ signalr/hubs」を使用していました。また、ブラウザーの互換性のためにJSON 2jsリファレンスを追加しました。 .jsを宣言する順序が重要であることに注意してください。

<script src="Scripts/JSON2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">

この問題を見つけるために、次のようにロギングをオンにし、開発ツールのコンソールを調べて、ローカルホストにデプロイしたときのエラーを確認しました。

// Logs errors to the browser dev 'f12' console
$.connection.hub.logging = true;

これが他の誰かに役立つことを願っています。私は今、複数のPCでChrome、IE9、10で遊んでいます-なんて素晴らしいライブラリでしょう!

0
John

ジョンとは逆に、

Signalr/hubs宣言に/を追加する必要がありました

すなわち。

<script src="signalr/hubs" type="text/javascript"></script>

なりました

<script src="/signalr/hubs" type="text/javascript"></script>
0
Adam