我正在为我的网站编写一个聊天室页面,但遇到了一些问题。我想确保聊天室参与者使用的名称是唯一的。集线器类本身包含一个 List<> 已经参与聊天的参与者,因此我向该类添加了一个方法来检查是否存在已在使用的名称:
public bool UserNameInUse(string name)
{
UserDetail item = ConnectedUsers.FirstOrDefault(x => x.UserName == name);
return (item.ConnectionId == null);
}
在 Javascript 方面,我尝试调用 hub 方法来检查名称是否已在开始连接之前使用,如下所示:
$("#btnStartChat").click(function () {
var name = $("#txtNickName").val();
if (name.length > 0) {
var status = chatHub.server.userNameInUse(name);
alert(status);
if (status!=1)
chatHub.server.connect(name);
else
alert("The name you chose is already in use. Try a different one, please.");
}
else {
alert("Please enter a name to use for this chat.");
}
});
如您所见,我对调用进行了检测以查看返回的内容。但不是从集线器方法调用中获取值 (这 确实 触发了,因为我在 Debug模式下在 Visual Studio 中测试了它),这是我从警告框中得到的:
我已经尝试将返回类型更改为字符串并发回文本,更改为 int 并返回数字,但每次运行代码时我都会得到相同的结果。谁能帮我理解为什么调用没有返回值?
最佳答案
您需要注册回调函数以接收服务器响应,例如
chatHub.server.UserNameInUse(name).done(function (isInUse) {
if (isInUse) {
// Server returned true
} else {
// Server returned false
}
}).fail(function (error) {
console.log('Invocation of UserNameInUsefailed. Error: ' + error);
});
有关更多信息,请在此处查看 SignalR 文档
关于对 SignalR 集线器方法的 Javascript 调用不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40615504/