【问题标题】:Javascript call to a SignalR hub method doesn't return a value对 SignalR 集线器方法的 Javascript 调用不返回值
【发布时间】:2016-11-15 16:56:27
【问题描述】:

我正在为我的网站编写聊天室页面,但遇到了一些障碍。我想确保聊天室参与者使用的名称是唯一的。集线器类本身包含一个列表,其中包含已经参与聊天的参与者,因此我向该类添加了一个方法来检查是否存在已使用的名称:

    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.");
    }
});

如您所见,我对调用进行了检测以查看返回的内容。但不是从集线器方法调用中获取值 (确实触发,因为我在调试模式下在 Visual Studio 中对其进行了测试),这是我从警报框中得到的:

我尝试将返回类型更改为字符串并将文本发送回 int 并返回一个数字,但每次运行代码时都会得到相同的结果。谁能帮我理解为什么调用没有返回值?

【问题讨论】:

    标签: javascript c# asp.net webforms signalr


    【解决方案1】:

    您需要注册回调函数以接收服务器响应,例如

    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 文档

    How to call server methods from the client

    【讨论】:

    • 工作得非常好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多