我似乎对 SignalR 的 JS 客户端中心有疑问。
问题是“on”处理程序似乎不起作用——它不会产生错误,但不会接收到服务器发送的任何信号。下面的代码显示了我调用服务器(使用调用)的一个提取,它工作正常 - 然后在服务器上我回调到 acceptHubData 应该在客户端上拾取但不是。
我的目标是当导航到每个页面将打开到特定集线器的连接并在用户移动到另一个页面时释放此连接的页面时!
编辑:使用以下代码片段有效,但我想知道为什么下面使用“on”事件的代码不起作用!
var superHub = $.connection.mySuperHub;
superHub.client.acceptHubData = function (data) {
$('<li>hello there' + data + '</li>').prependTo($('#ul1'))
}
$.connection.hub.start().done(function () {
$('<li>done phase 1</li>').prependTo($('#ul1'))
});
任何帮助将非常感激!
这是客户端代码(在 js 中)
$(document).ready(function () {
var myHub;
try {
var connection = $.hubConnection();
connection.start().done(function () {
myHub = connection.createHubProxy("mySuperHub");
myHub.on('acceptHubData', function (data) {
alert(data); // THIS IS NOT CALLED!
});
myHub.invoke('AcceptSignal', "hello from the client2");
});
}
catch (e) {
alert(e.message);
}
});
这是服务器代码:
[HubName("mySuperHub")]
public class MyHub : Hub
{
private readonly HubEngine _hubEngine;
public MyHub() : this(HubEngine.Instance) { }
public MyHub(HubEngine hubEngine)
{
_hubEngine = hubEngine;
}
public void AcceptSignal(string msg)
{
Clients.Caller.acceptHubData("hi");
Clients.All.acceptHubData("hi");
}
}