SignalR JavaScript未连接

时间:2017-03-08 17:40:00

标签: javascript signalr

我对JavaScript非常陌生。我试图在JavaScript中实现一个简单的SignalR服务器回调。

首先是_Layout.cshtml

<body>

    <div class="container body-content">
        @RenderBody()
    </div>

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)

</body>

接下来,我的Index.html

  <body>

        @section scripts
        {
            <script src="/Scripts/jquery-3.1.1.min.js"></script>
            <script src="/Scripts/jquery.signalR-2.1.2.js"></script>
            <script src="/signalr/hubs"></script>

            <script type="text/javascript">
                $(function () {

                    console.log("HELLO WORLD");

                    $.connection.hub.url = 'http://blah:8094/signalr';
                    var proxy = $.connection.DashboardHub;

                    proxy.client.NotifyAllClientsOfChanges = function () {

                        var searchUrl = "Home/GetData";

                        $.ajax({
                            url: searchUrl,
                            type: "POST",
                            success: function (data) {
                                $("#divData").html(data);
                            }
                        });
                    };

                    $.connection.hub.start({ transport: 'auto', xdomain: true })
                    .done(function () {
                        console.log('Connected.');
                    })
                    .fail(function (e) {
                        console.log('Unable to connect:' + e);
                    });
                });
            </script>
        }

        @using (@Html.BeginForm("Index", "Home"))
        {
            <div id="divData">
                @{
                    var grid = new WebGrid(Model);

                    @grid.GetHtml(
                    mode: WebGridPagerModes.All, 
                    columns:
                    grid.Columns
                    (
                        grid.Column(columnName: "SiteId", header: "Site Id", format: @<text>@item.SiteId</text>),
                        grid.Column(columnName: "Instrument", header: "Instrument", format: @<text>@item.InstrumentId</text> ),
                        .
                        .
                        .
                    ))
                }
            </div>
        }

    </body>

我看到&#34; HELLO WORLD&#34;控制台登录到顶部,但我没有看到任何控制台日志的&#34;已连接&#34;或&#34;无法连接&#34;

我在控制台中看到一条错误,上面写着&#34;无法读取属性&#39;客户端&#39;未定义&#34;

我跟踪了很多关于类似主题的SO帖子并尝试了很多东西。我并不完全确定我的编码是否正确。

有人看到了什么错了吗?

由于

3 个答案:

答案 0 :(得分:3)

不确定整个功能,但对于初学者:

var proxy = $ .connection.DashboardHub;
应该
var proxy = $ .connection.dashboardHub;

需要以小写

开头

答案 1 :(得分:1)

我抓到了一些错误。首先,如果您使用跨域服务器作为您的signalR集线器,那么您应该将它包含在您的标头中而不是本地标识

<script src="/Scripts/jquery-3.1.1.min.js"></script>
<script src="/Scripts/jquery.signalR-2.1.2.js"></script>
<script src="http://blah:8094/signalr/hubs"></script>

其次,当您在SignalR的客户端声明名称时,即使您在服务器中将其设置为大写,也必须对第一个单词使用小写。意味着,如果你声明`MyChatHub&#39;在您的服务器中,您将其称为&#39; myChatHub&#39;在你的javascript中。

var proxy = $.connection.dashboardHub;

proxy.client.notifyAllClientsOfChanges

第三,为什么你在AJAX中使用POST方法是GET方法?

答案 2 :(得分:0)