我有以下代码从客户端页面调用集线器上的方法
var app = $.connection.myHub;
$.connection.hub.start().done(function () {
$('#mylink').click(function (e) {
e.preventDefault();
app.server.myMethod();
});
).fail(function (error) {
console.log('Invocation of start failed. Error: ' + error)
});
此代码工作正常但经过一段时间后,当我再次单击该链接时,出现以下错误
SignalR: Connection must be started before data can be sent. Call .start() before .send()
链接点击事件已在start().done()
内部,因此如果未启动连接,如何触发链接点击的事件处理程序。
如果这是因为连接超时,我该如何处理异常并将用户重定向到登录页面。
为什么.fail()
内的代码不会执行
答案 0 :(得分:3)
推荐阅读:Connection Lifetime Events in SignalR
这是我关于发生什么事的理论。您可以通过启用客户端日志记录进行确认 - 在$.connection.hub.logging = true;
调用之前添加start()
。
.fail()
未执行。但是在建立连接后,可能会有短暂或更长的断开连接。客户端正在尝试重新连接一段时间(断开连接超时),如果不成功,它将放弃,您需要再次调用.start()
(例如,在disconnected
处理程序中)。
通过处理'已断开连接'事件
$。connection.hub.disconnected(function(){});