SignalR 2.X 和 JQuery 3.X “ON”未触发

Posted

技术标签:

【中文标题】SignalR 2.X 和 JQuery 3.X “ON”未触发【英文标题】:SignalR 2.X and JQuery 3.X "ON" not fired 【发布时间】:2020-09-12 07:13:24 【问题描述】:

我在使用任何版本的 JQuery 3.x 运行 SignalR 2.4.1 时遇到问题

我有一个非常简单的集线器,可以将推送通知发送到 AngualrJS 应用程序。该应用程序适用于 JQuery 1 和 2,但一旦我升级到 3,SignalR 就会停止工作。 我读到了旧加载的问题,卸载。但事实并非如此,因为它已在 2.2.1 中修复

我在控制台中没有错误,angualrJS 工厂只想在通知到来时触发 ON 事件。

这是我使用的代码,非常标准,可以很好地与 JQuery

function signalRHubProxyFactory(serverUrl, hubName, startOptions) 
        var connection = $.hubConnection(signalRServer);
        var proxy = connection.createHubProxy(hubName);
        connection.start().done(function ()  );

        return 
            on: function (eventName, callback) 
                proxy.on(eventName, function (result) 
                    $rootScope.$apply(function () 
                        if (callback) 
                            callback(result);
                        
                    );
                );
            ,
            off: function (eventName, callback) 
                proxy.off(eventName, function (result) 
                    $rootScope.$apply(function () 
                        if (callback) 
                            callback(result);
                        
                    );
                );
            ,
            invoke: function (methodName, callback) 
                proxy.invoke(methodName)
                    .done(function (result) 
                        $rootScope.$apply(function () 
                            if (callback) 
                                callback(result);
                            
                        );
                    );
            ,
            connection: connection
        ;
    ;

    return signalRHubProxyFactory;    

有人遇到同样的问题吗?

这是我的脚本列表

    <script src="../Scripts/jquery-3.5.1.js"></script>
    <script src="../Scripts/jquery.signalR-2.4.1.js"></script>
    <script src="../Scripts/bootstrap.min.js"></script>
    <script src="../Scripts/angular.min.js"></script>

谢谢

【问题讨论】:

【参考方案1】:

对于遇到这个问题的每个人来说,为了使 AngularJS、SignalR 和 JQuery >= 3 工作,必须在它们之前添加 angular.js 脚本

<script src="../Scripts/angular.min.js"></script>

<script src="../Scripts/jquery-3.5.1.js"></script>
<script src="../Scripts/jquery.signalR-2.4.1.js"></script>
<script src="../Scripts/bootstrap.min.js"></script>

【讨论】:

以上是关于SignalR 2.X 和 JQuery 3.X “ON”未触发的主要内容,如果未能解决你的问题,请参考以下文章

jQuery版本差异简要分析

jQuery选择什么版本 1.x? 2.x? 3.x?

jQuery选择什么版本 1.x? 2.x? 3.x?

jQuery选择什么版本 1.x? 2.x? 3.x?

jquery

Jquery入门