使用SignalR与文件onload而不是jquery onload

时间:2012-02-07 07:28:37

标签: asp.net-mvc signalr

我在一个独立的测试网站中使用了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);
        }
    }

DOUBLE EDIT:好的,我已经在我的mvc项目中创建了一个标准的html页面并再次连接了onload事件,一切正常。问题似乎是当我打电话

时,投票似乎不起作用
$.connection.hub.start(); 

而是在获取当前网址并在get请求中再次返回页面。

1 个答案:

答案 0 :(得分:3)

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