JavaScript连接Azure SignalR成功后客户端事件无法触发问题求助
SignalR客户端事件无法触发问题解决
核心问题1:事件名大小写不匹配
SignalR的客户端事件名称是大小写严格敏感的,你当前服务端推流的事件名和客户端监听的名称不一致:
- 服务端代码中调用
Await Clients.All.SendAsync("ReceiveMessage", user, message),推送的事件名为首字母大写的ReceiveMessage - 客户端代码绑定的是首字母小写的
reportHubProxy.on("receiveMessage", ...)
解决方法
两边统一事件名即可,比如将客户端监听代码修改为:
reportHubProxy.on("ReceiveMessage", function (user, message) { // 原有逻辑不变 })
核心问题2:对客户端事件触发逻辑的误解
你在客户端绑定的 reportHubProxy.on("sendMessage", ...) 事件,仅会在服务端主动向客户端推送名为sendMessage的事件时触发,本地调用 reportHubProxy.invoke("sendMessage") 是调用服务端的对应方法,不会触发本地绑定的该事件。
测试本地事件触发的方法
如果需要本地测试事件回调是否正常,可以用fire方法主动触发本地绑定的事件:
// 放在connection.start的done回调里测试即可 reportHubProxy.fire("sendMessage", "测试用户", "测试消息")
附加代码问题
你客户端代码里的模板字符串写法错误,当前用双引号包裹不会解析变量:
// 原错误写法 li.textContent = "${user} says ${message}"; // 修改为反引号包裹 li.textContent = `${user} says ${message}`;
内容的提问来源于stack exchange,提问作者Rachel Edge
相关产品推荐
相关产品推荐

