1

私はsignalRチャットアプリを使用しました(このチュートリアルで説明されているようにhttp://sergiotapia.com/2011/09/signalr-with-mvc3-chat-app-build-asynchronous-real-time-persistant-connection-websites/)スタンドアロンのテストサイトで、すべてがうまく機能します。

私は今、それを私のより大きなプロジェクトに取り入れようとしています。

残念ながら、私の大規模なプロジェクトではbody onload関数が定義されているため、標準のjquery $(function(){});を使用しません。ページの読み込み時に処理を実行するための構文。これは今のところそれほど問題ではありません。ほとんどのjqueryプラグインとスクリプトは、私のbodyonloadによって呼び出される関数で実行されます。

しかし、何らかの理由で、私のsignalRコードが実行されていません。
上に示したものとまったく同じコードですが、私の体の負荷にのみ呼び出されます。
ページが読み込まれ、/ signalr / negotiate(URLとclientIDを返す)に投稿されます

動作する私のサンプルアプリでは、/ signalr / connectへの継続的な投稿を行い
ます。他のアプリでは、現在表示されているページに1回だけアクセスします。
接続するためのポストを作成していません。

これを手動で呼び出す方法はありますか?これが機能していないページのソースです。JQuery自体を参照しない理由は、マスターページに読み込まれているためです。JQueryが存在します。

<script src="/public/javascript/jquery.signalR.min.js">
<script src="/public/javascript/json2.js">
<script type="text/javascript" src="/signalr/hubs">

<div>
    <input type="text" id="msg" />
    <input type="button" id="broadcast" />
    <ul id="messages"></ul>
</div>

<script type="text/javascript">
function ExecuteOnLoad() {
// Proxy created on the fly
var chat = $.connection.chat;
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
$("#broadcast").click(function () {
// Call the chat method on the server
chat.send($('#msg').val());
});
// Start the connection
$.connection.hub.start();
}
</script>

編集:ここにチャットハブがあります

public class Chat : SignalR.Hubs.Hub
    {
        public void Send(string message)
        {
            //Call the addMessage method on all clients.
            Clients.addMessage(message);
        }
    }

ダブルエディット:わかりました。mvcプロジェクトで標準のhtmlページを作成し、onloadイベントを再度接続すると、すべてが正常に機能します。問題は、電話をかけたときにポーリングが機能していないように見えることのようです

$.connection.hub.start(); 

代わりに、現在のURLに取得し、getリクエストでページを再度返します。

4

1 に答える 1

3

問題は私が尋ねた質問とは何の関係もありませんでした。
onload関数と関係があるのではないかと思いましたが、そうではありませんでした。
問題は、私のページにJquery.Validateプラグインへの参照があったためです。
私が使用していたバージョンは1.7でしたが、プラグインの1.9に更新しましたが、正常に機能しました。

于 2012-02-07T13:02:54.640 に答える