获取0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性'client'



我正在使用SignalR API制作聊天应用程序。我收到错误为:

0x800a138f - JavaScript 运行时错误:无法获取属性"客户端" 未定义或空引用

这是我的代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link type="text/css" rel="stylesheet" href="/Css/ChatStyle.css" />
    <link rel="stylesheet" href="/Css/JQueryUI/themes/base/jquery.ui.all.css">


    <!--Script references. -->
      <!--Reference the jQuery library. -->
    <script src="/Scripts/jquery-1.8.2.min.js"></script>
    <script src="/Scripts/ui/jquery.ui.core.js"></script>
    <script src="/Scripts/ui/jquery.ui.widget.js"></script>
    <script src="/Scripts/ui/jquery.ui.mouse.js"></script>
    <script src="/Scripts/ui/jquery.ui.draggable.js"></script>
    <script src="/Scripts/ui/jquery.ui.resizable.js"></script>

    <!--Reference the SignalR library. -->
    <script src="/Scripts/jquery.signalR-1.0.0.js"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script src="/signalr/hubs"></script>
    <script type="text/javascript">
        $(function () {
            setScreen(false);
            // Declare a proxy to reference the hub. 
            var chatHub = $.connection.chatHub;
            registerClientMethods(chatHub);
            // Start Hub
            $.connection.hub.start().done(function () {
                registerEvents(chatHub)
            });
        });
        function setScreen(isLogin) {
            if (!isLogin) {
                $("#divChat").hide();
                $("#divLogin").show();
            }
            else {
                $("#divChat").show();
                $("#divLogin").hide();
            }
        }
        function registerEvents(chatHub) {
            $("#btnStartChat").click(function () {
                var name = $("#txtNickName").val();
                if (name.length > 0) {
                    chatHub.server.connect(name);
                }
                else {
                    alert("Please enter name");
                }
            });

            $('#btnSendMsg').click(function () {
                var msg = $("#txtMessage").val();
                if (msg.length > 0) {
                    var userName = $('#hdUserName').val();
                    chatHub.server.sendMessageToAll(userName, msg);
                    $("#txtMessage").val('');
                }
            });

            $("#txtNickName").keypress(function (e) {
                if (e.which == 13) {
                    $("#btnStartChat").click();
                }
            });
            $("#txtMessage").keypress(function (e) {
                if (e.which == 13) {
                    $('#btnSendMsg').click();
                }
            });

        }
        function registerClientMethods(chatHub) {
            // Calls when user successfully logged in
            chatHub.client.onConnected = function (id, userName, allUsers, messages) {
                setScreen(true);
                $('#hdId').val(id);
                $('#hdUserName').val(userName);
                $('#spanUser').html(userName);
                // Add All Users
                for (i = 0; i < allUsers.length; i++) {
                    AddUser(chatHub, allUsers[i].ConnectionId, allUsers[i].UserName);
                }
                // Add Existing Messages
                for (i = 0; i < messages.length; i++) {
                    AddMessage(messages[i].UserName, messages[i].Message);
                }

            }
            // On New User Connected
            chatHub.client.onNewUserConnected = function (id, name) {
                AddUser(chatHub, id, name);
            }

            // On User Disconnected
            chatHub.client.onUserDisconnected = function (id, userName) {
                $('#' + id).remove();
                var ctrId = 'private_' + id;
                $('#' + ctrId).remove();

                var disc = $('<div class="disconnect">"' + userName + '" logged off.</div>');
                $(disc).hide();
                $('#divusers').prepend(disc);
                $(disc).fadeIn(200).delay(2000).fadeOut(200);
            }
            chatHub.client.messageReceived = function (userName, message) {
                AddMessage(userName, message);
            }

            chatHub.client.sendPrivateMessage = function (windowId, fromUserName, message) {
                var ctrId = 'private_' + windowId;

                if ($('#' + ctrId).length == 0) {
                    createPrivateChatWindow(chatHub, windowId, ctrId, fromUserName);
                }
                $('#' + ctrId).find('#divMessage').append('<div class="message"><span class="userName">' + fromUserName + '</span>: ' + message + '</div>');
                // set scrollbar
                var height = $('#' + ctrId).find('#divMessage')[0].scrollHeight;
                $('#' + ctrId).find('#divMessage').scrollTop(height);
            }
        }
        function AddUser(chatHub, id, name) {
            var userId = $('#hdId').val();
            var code = "";
            if (userId == id) {
                code = $('<div class="loginUser">' + name + "</div>");
            }
            else {
                code = $('<a id="' + id + '" class="user" >' + name + '<a>');
                $(code).dblclick(function () {
                    var id = $(this).attr('id');
                    if (userId != id)
                        OpenPrivateChatWindow(chatHub, id, name);
                });
            }
            $("#divusers").append(code);
        }
        function AddMessage(userName, message) {
            $('#divChatWindow').append('<div class="message"><span class="userName">' + userName + '</span>: ' + message + '</div>');
            var height = $('#divChatWindow')[0].scrollHeight;
            $('#divChatWindow').scrollTop(height);
        }
        function OpenPrivateChatWindow(chatHub, id, userName) {
            var ctrId = 'private_' + id;
            if ($('#' + ctrId).length > 0) return;
            createPrivateChatWindow(chatHub, id, ctrId, userName);
        }
        function createPrivateChatWindow(chatHub, userId, ctrId, userName) {
            var div = '<div id="' + ctrId + '" class="ui-widget-content draggable" rel="0">' +
                       '<div class="header">' +
                          '<div  style="float:right;">' +
                              '<img id="imgDelete"  style="cursor:pointer;" src="/Images/delete.png"/>' +
                           '</div>' +
                           '<span class="selText" rel="0">' + userName + '</span>' +
                       '</div>' +
                       '<div id="divMessage" class="messageArea">' +
                       '</div>' +
                       '<div class="buttonBar">' +
                          '<input id="txtPrivateMessage" class="msgText" type="text"   />' +
                          '<input id="btnSendMessage" class="submitButton button" type="button" value="Send"   />' +
                       '</div>' +
                    '</div>';
            var $div = $(div);
            // DELETE BUTTON IMAGE
            $div.find('#imgDelete').click(function () {
                $('#' + ctrId).remove();
            });
            // Send Button event
            $div.find("#btnSendMessage").click(function () {
                $textBox = $div.find("#txtPrivateMessage");
                var msg = $textBox.val();
                if (msg.length > 0) {
                    chatHub.server.sendPrivateMessage(userId, msg);
                    $textBox.val('');
                }
            });
            // Text Box event
            $div.find("#txtPrivateMessage").keypress(function (e) {
                if (e.which == 13) {
                    $div.find("#btnSendMessage").click();
                }
            });
            AddDivToContainer($div);
        }
        function AddDivToContainer($div) {
            $('#divContainer').prepend($div);
            $div.draggable({
                handle: ".header",
                stop: function () {
                }
            });
            ////$div.resizable({
            ////    stop: function () {
            ////    }
            ////});
        }
    </script>
</head>
<body>
    <div id="header">
        SignalR Chat Room
    </div>
    <br />
    <br />
    <br />
    <div id="divContainer">
        <div id="divLogin" class="login">
            <div>
                Your Name:<br />
            <input id="txtNickName" type="text" class="textBox" />
            </div>
            <div id="divButton">
                <input id="btnStartChat" type="button" class="submitButton" value="Start Chat" />
            </div>
        </div>
        <div id="divChat" class="chatRoom">
            <div class="title">
                Welcome to Chat Room [<span id='spanUser'></span>]
            </div>
            <div class="content">
                <div id="divChatWindow" class="chatWindow">
                </div>
                <div id="divusers" class="users">
                </div>
            </div>
            <div class="messageBar">
                <input class="textbox" type="text" id="txtMessage" />
                <input id="btnSendMsg" type="button" value="Send" class="submitButton" />
            </div>
        </div>
        <input id="hdId" type="hidden" />
        <input id="hdUserName" type="hidden" />
    </div>
</body>
</html>

您指的是undefined对象的client对象。所以我一直在你的代码中搜索

.client

这些是结果:

chatHub.client.onConnected
chatHub.client.onNewUserConnected
chatHub.client.onUserDisconnected
chatHub.client.messageReceived
chatHub.client.sendPrivateMessage

所以,如果你看一下结果,很明显chatHub undefined在某个地方。这是您初始化它的方式:

var chatHub = $.connection.chatHub;

我想知道$.connection里面有什么.您是否缺少 html 中的脚本?

有几件事...

您使用的是旧的信号器版本,您是否尝试过升级到最新版本?

否则;我有一个类似的问题,我必须通过在没有生成的代理(/signalr/hubs)的情况下设置连接来解决它。

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client 请参阅此链接,而不是将其设置为"生成的代理",而是在没有它的情况下实现它。(搜索"没有生成的代理")

相关内容

  • 没有找到相关文章

最新更新