【问题标题】:$.hubConnection is not a function(…)$.hubConnection 不是函数(…)
【发布时间】:2017-03-02 00:38:33
【问题描述】:

我的 SignalR 项目遇到了问题。我已经创建了一个控制台来运行 SignalR,然后尝试在我的网站上使用它(现在都在 localhost 模式下运行)

SignalRSelfHost

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;
using Microsoft.AspNet.SignalR.Hubs;

namespace SignalRSelfHost
{
    class Program
    {
        static void Main(string[] args)
        {
            // This will *ONLY* bind to localhost, if you want to bind to all addresses
            // use http://*:8080 to bind to all addresses. 
            // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
            // for more information.
            string url = "http://localhost:8080";
            using (WebApp.Start(url))
            {
                Console.WriteLine("Server running on {0}", url);
                Console.ReadLine();
            }
        }
    }
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
    [HubName("myHub")]
    public class MyHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addMessage(name, message);
        }
    }
}

Index.Html

<script src="Scripts/jquery-3.1.1.min.js"></script>

<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>

<script src="http://localhost:8080/signalr/hubs"></script>

<script type="text/javascript">
    $(function () {
        //Set the hubs URL for the connection
        //$.connection.hub.url = "http://localhost:8080/signalr";

        //// Declare a proxy to reference the hub.
        //var chat = $.connection.myHub;

        var conn = $.hubConnection("http://localhost:8080/signalr");
        var hubProxy = conn.createHubProxy('myHub');


        conn.start().done(function () {
        });
    });
</script>

上面的一些已经完成,因为我也尝试过,但也没有用。

谁能告诉我为什么会出现错误:$.hubConnection is not a function(...)

【问题讨论】:

  • 您是否在客户端使用 Visual Studio 项目模板之一?

标签: signalr signalr-hub


【解决方案1】:

我不确定您的 jQuery 版本是否受支持。加载错误版本的 jQuery 或多次加载时,我遇到了奇怪的副作用。
使用 JSPM 时,jspm resolve --only npm:jquery@2.2.4 有帮助。

这些版本有效:

<script src="jquery-2.1.4.min.js"></script>
<script src="jquery.signalR-2.2.0.min.js"></script>

"jquery": "npm:jquery@2.2.4",
"ms-signalr-client": "npm:ms-signalr-client@2.2.5",

我还建议在指定hubConnection 时省略“/signalr”后缀。它是自动添加的。

【讨论】:

    【解决方案2】:

    我刚刚遇到了同样的问题。问题原来是 JQuery 脚本在页面底部再次运行(我使用的 ASP.NET MVC 模板的一部分),清除了 SignalR-JQuery 注册。确保您的 HTML 页面底部没有额外的脚本标记或 @Scripts.Render 调用。

    【讨论】:

      【解决方案3】:

      枢纽:

      [HubName("ContosoChatHub")]
      public class ChatHub : Hub
      

      Javascript 客户端:删除 url,你不需要它。

      var connection = $.hubConnection();
      var contosoChatHubProxy = connection.createHubProxy('ContosoChatHub');
      
      connection.start()
         .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
         .fail(function(){ console.log('Could not Connect!'); });
      });
      

      createHubProxy 中的字符串必须与 HubName 属性中的字符串相同。

      【讨论】:

      • 当您的服务器和客户端在不同的服务器上时,如何删除 url?
      • 抱歉这么久才回复您,代理是自动生成的,它知道如何解决它。您正在做的是试图告诉它在特定位置解决,这不是必需的。
      • /讽刺/我喜欢人们在没有提供理由的情况下标记答案。 /讽刺关闭/无法知道我是否真的错了(这不是第一次也不是最后一次),或者他们是否误解了答案。简单地标记答案对任何人都没有帮助。
      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 2012-09-21
      • 1970-01-01
      • 2019-01-21
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多