我可以使用 SignalR 在所有客户端上触发 AJAX 请求吗?
Posted
技术标签:
【中文标题】我可以使用 SignalR 在所有客户端上触发 AJAX 请求吗?【英文标题】:Can I use SignalR to trigger an AJAX request on all clients? 【发布时间】:2021-10-27 06:25:04 【问题描述】:我在视图中有一个 DIV,当服务器上的某些数据发生更改时必须刷新该 DIV。 我无法使用间隔定期更新它。数据会因用户在其客户端中执行某项操作而发生变化。
换句话说:用户A点击一个按钮,服务器上的数据发生变化。当页面中的 DIV 刷新时,所有用户都应该“立即”看到更改。
怎么做?
【问题讨论】:
【参考方案1】:我认为您可以关注this tutorial 来实现您的功能。但是需要根据代码做一些改动。
首先,该教程提供了一个看起来像聊天室的示例,这意味着他的客户端中的一些人点击了发送按钮,然后其他客户端将立即显示新发送的消息。所以我认为它真的很适合你的场景。所有代码都在教程页面中提供,我在下面显示您需要更改的代码。
首先,您可以更改 ChatHub.cs 文件以添加有关更新数据库的逻辑。
public class ChatHub : Hub
public async Task SendMessageToAllAndUpdateData(string user, string message, string state)
//write some code to update the database here
await Clients.All.SendAsync("ReceiveMessage", user, message, state);
然后您需要修改 js 文件,该文件现在的工作方式类似于将 li
元素附加到页面,但您应该更改它以更新之前显示的数据。
connection.on("ReceiveMessage", function (user, message, state)
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
li.textContent = `$user says $message and his state is $state`;
//write code here to modify the data displayed in the page
document.getElementById("stateInput").value = state;
);
【讨论】:
以上是关于我可以使用 SignalR 在所有客户端上触发 AJAX 请求吗?的主要内容,如果未能解决你的问题,请参考以下文章
核心 2.1 SignalR 和 SQLDependency