SignalR- Jquery: $.connection.chathub返回undefined
SignalR- Jquery: $.connection.chathub返回undefined
我正在使用Asp.net MVC,AngularJs,SignalR和Jquery创建一个聊天应用程序。
在聊天视图中,当我尝试为聊天对象设置值时,它会传递null值,代码引用在括号内(var chat = $.connection.chathub;)。由于这个问题,其他功能都无法正常工作。
我在这个项目中使用了"Microsoft.AspNet.SignalR.2.2.2",以及与jquery和signalr相关的脚本,如'jquery.signalR-2.2.2.js, jquery-ui-1.12.1.js'和其他一些jquery库。
有人能帮帮我吗?我已经附上了代码供您参考。
@section scripts{
$(function () {
StartChat();
});
function StartChat() {
alert('StartChat');
var chat = $.connection.chathub;
alert('chat : ' + $.connection.chathub);
//获取已登录用户
$('#UserIn').val($('#LoggedInUser').val());
chat.client.differentName = function (name) {
return false;
//提示输入不同的用户名
$('#UserIn').val($('#LoggedInUser').val());
chat.server.notify($('#UserIn').val(), $.connection.hub.id);
};
chat.client.online = function (name) {
//更新用户列表
if (name == $('#UserIn').val())
$('#onlineusers').append('You: ' + name + '');
else {
$('#onlineusers').append('' + name + '');
$("#users").append('');
}
};
//
chat.client.enters = function (name) {
$('#chatlog').append('' + name + '加入了对话');
$("#users").append('');
$('#onlineusers').append('' + name + '');
};
//创建一个函数,用于广播聊天消息。
chat.client.broadcastMessage = function (name, message) {
//显示消息
$('#chatlog').append('' + name + ': ' + message + '');
};
chat.client.disconnected = function (name) {
//有人离开页面时调用
$('#chatlog').append('' + name + '离开了对话');
$('#onlineusers div').remove(":contains('" + name + "')");
$("#users option").remove(":contains('" + name + "')");
};
//开始连接
$.connection.hub.start().done(function () {
alert('Send button clicked : ' + $('#message').val());
//调用服务器的notify方法
chat.server.notify($('#UserIn').val(), $.connection.hub.id);
$('#btnsend').click(function () {
alert('Send button clicked : ' + $('#message').val());
//调用hub的Send方法
chat.server.send($('#UserIn').val(), $('#message').val());
//清除文本框并为下一个评论重置焦点。
$('#message').val('').focus();
});
})
}
}
@model ZupChatApp.Models.User
@{
ViewBag.Title = "ChatRoomView";
}
@Html.Label("LoggedInUser", Model.FirstName, new { id = "" })
Zup聊天室视图
abcccc
@*
在线用户
*@
SignalR- Jquery : $.connection.chathub返回undefined的问题出现的原因是没有正确引用SignalR库和自动生成的SignalR hub脚本。解决方法是按照Microsoft提供的示例从头开始创建整个解决方案,并确保正确引用了SignalR库和hub脚本。
文章内容如下:
首先,我们应始终使用Microsoft提供的示例作为起点,不仅仅是页面的示例,还要整个解决方案。确保示例解决方案能正常运行。
这对于任何你不熟悉的技术都是正确的做法。然后,逐步修改以达到你所需的效果。
下面是一个我之前可行的页面示例,你可以进行比较看看有什么不同之处:
谢谢你的建议。我会尝试使用一个新的项目。
虽然看起来可能有点麻烦,但通过这种方式找到错误并构建一个无错误的系统通常会减少沮丧感。
问题出现的原因是因为在引用chathub
时大小写不匹配。根据"Getting Started with SignalR 2"文档中的说明,JavaScript中的引用应该是驼峰命名法。示例代码将C#中的ChatHub
类在JavaScript中引用为chatHub
。
解决方法是将引用改为var chat = $.connection.chatHub;
。此外,<script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
应该在<script src="~/signalr/hubs"></script>
之前添加。
如果以上方法仍然无法解决问题,可以检查以下几点:
1. 确保在_Layout
中引用了jquery
。
2. 检查控制台是否有任何错误信息。
感谢你的指正。我进行了相应的更改。然后它给我同样的空引用错误。我通过手动下载"hubs.js"并将其包含在脚本文件夹中来解决了空引用问题。这解决了空引用问题,但之后还有许多其他复杂的问题。所以现在正在处理这些问题。