Signalr 通知浏览器UI有关服务器的信号器请求
我正在浏览器中使用信号器。一些请求(在服务器上调用函数)很长,我想显示微调器/加载栏Signalr 通知浏览器UI有关服务器的信号器请求,signalr,signalr.client,Signalr,Signalr.client,我正在浏览器中使用信号器。一些请求(在服务器上调用函数)很长,我想显示微调器/加载栏 我是否可以在函数启动和返回时以某种方式钩住事件。我试图弄明白你的意思-我认为基本上你想要某种方式钩住调用的开始和结束(加载和卸载微调器) 我用两种不同的方式来做这件事——首先是一次性的(第一个例子),然后是更系统的(第二个例子)。希望其中之一就是你所需要的 $.connection.myHub.server.hubMethod().done(function () {
我是否可以在函数启动和返回时以某种方式钩住事件。我试图弄明白你的意思-我认为基本上你想要某种方式钩住调用的开始和结束(加载和卸载微调器) 我用两种不同的方式来做这件事——首先是一次性的(第一个例子),然后是更系统的(第二个例子)。希望其中之一就是你所需要的
$.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)
如果您不喜欢这样,可能是因为您在数百段不同的代码中调用了hub方法,那么还有其他一些技巧要复杂一些。让我们看看:
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.