1

我使用了 signalR 聊天应用程序(如本教程中所述http://sergiotapia.com/2011/09/signalr-with-mvc3-chat-app-build-asynchronous-real-time-persistant-connection-websites/ ) 在一个独立的测试站点中,一切都很好。

我现在正试图将它整合到我更大的项目中。

现在不幸的是,我的大型项目定义了一个 body onload 函数,所以我不使用标准的 jquery $(function () {}); 在页面加载时执行内容的语法。到目前为止,这还不是什么大问题,大多数 jquery 插件和脚本都在我的 body onload 调用的函数中执行,并且很好。

但由于某种原因,我的 signalR 代码没有执行。
它与上面列出的完全相同的代码,只是它在我的身体负荷上调用。
页面加载,发布到 /signalr/negotiate(返回 url 和 clientID)

在我工作的示例应用程序中,它会连续发布到 /signalr/connect
在我的另一个应用程序中,它只是单次访问我当前所在的页面。
它没有使帖子连接。

有没有办法手动调用它?这是页面的来源不起作用。请注意,我不引用 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 并在获取请求中再次返回页面。

4

1 回答 1

3

这个问题与我问的问题无关。
我认为这可能与 onload 函数有关,但事实并非如此。
问题是因为我的页面引用了 Jquery.Validate 插件。
我使用的版本是 1.7,我更新到插件的 1.9,它工作正常。

于 2012-02-07T13:02:54.640 回答