Javascript 调用 SignalR 集线器方法没有 return 值
Javascript call to a SignalR hub method doesn't return a value
我正在为我的网站编写一个聊天室页面,但我 运行 遇到了一些麻烦。我想确保聊天室参与者使用的名称是唯一的。集线器 class 本身包含一个 List<> 已经参与聊天的参与者,因此我向 class 添加了一个方法来检查是否存在已使用的名称:
public bool UserNameInUse(string name)
{
UserDetail item = ConnectedUsers.FirstOrDefault(x => x.UserName == name);
return (item.ConnectionId == null);
}
在 Javascript 端,我尝试调用集线器方法来检查名称是否已在开始连接之前使用,如下所示:
$("#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.");
}
});
如您所见,我对调用进行了检测,以查看正在 returned 的内容。但不是从集线器方法调用中获取值
(确实触发了,因为我在Visual Studio调试模式下测试了它),这是我从警告框中得到的:
我试过将 return 类型更改为字符串并将文本发送回 int 和 returning 数字,但每次 运行 代码。谁能帮我理解为什么调用没有 return 值?
您需要注册回调函数以接收服务器响应,例如
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 文档
我正在为我的网站编写一个聊天室页面,但我 运行 遇到了一些麻烦。我想确保聊天室参与者使用的名称是唯一的。集线器 class 本身包含一个 List<> 已经参与聊天的参与者,因此我向 class 添加了一个方法来检查是否存在已使用的名称:
public bool UserNameInUse(string name)
{
UserDetail item = ConnectedUsers.FirstOrDefault(x => x.UserName == name);
return (item.ConnectionId == null);
}
在 Javascript 端,我尝试调用集线器方法来检查名称是否已在开始连接之前使用,如下所示:
$("#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.");
}
});
如您所见,我对调用进行了检测,以查看正在 returned 的内容。但不是从集线器方法调用中获取值 (确实触发了,因为我在Visual Studio调试模式下测试了它),这是我从警告框中得到的:
我试过将 return 类型更改为字符串并将文本发送回 int 和 returning 数字,但每次 运行 代码。谁能帮我理解为什么调用没有 return 值?
您需要注册回调函数以接收服务器响应,例如
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 文档