通知浏览器 UI 有关对服务器的 SignalR 请求



我在浏览器中使用SignalR。一些请求(服务器上的调用函数(很长,我想显示微调器/加载栏。

我可以在启动此函数并返回时以某种方式钩住事件吗?

我试图弄清楚你的意思 - 我认为基本上你想要某种方式来挂钩到呼叫的开始和结束(加载和卸载微调器(?

我以两种不同的方式做到这一点 - 首先是一次性的(第一个例子(,然后是更系统地(第二个例子(。希望其中之一将是您需要的。

$.connection.myHub.server.hubMethod().done(function () {
                                //called on success
                            }).fail(function (e) {
                                //called on failure - I don't recommend reading e
                            }).always(function() {
                                //called regardless
                                spinner.close();
});
spinner.open(); // must be triggerd AFTER call incase exception thrown (due to connection not being up yet)

如果你不喜欢这样 - 也许是因为你在数百个不同的代码段中调用集线器方法,那么还有其他技巧有点复杂。让我们看看:

function SetupSpinnerOnCallToSignalrMethod(hubServer, method, spinnerStartCallback, spinnerEndCallback) {
    var prevFunc = hubServer[method];
    hubServer[method] = function () {
        var ret = prevFunc.apply(this, arguments);
        spinnerStartCallback(); // must be triggerd AFTER call incase exception thrown (due to connection not being up yet)
        ret.always(function() {
            spinnerEndCallback();
        });
        return ret;
    };
}
//then call this for each method
SetupSpinnerOnCallToSignalrMethod($.connection.myHub.server,
                                  "hubMethod",
                                  function() { spinner.open(); },
                                  function() { spinner.close(); }
);
//the server call should then work exactly as before, but the spinner open and close calls are invoked each time.

最新更新