gpt4 book ai didi

javascript - Signal R 和 AJAX 未从 API 获取更新

转载 作者:行者123 更新时间:2023-12-02 21:45:09 24 4
gpt4 key购买 nike

因此,我按照 MS 网站上的快速指南构建了 SignalR 应用程序: SignalR App

我认为我可以使用本地 API 来实时添加行后观察计数变化。我为此使用了 AJAX:

function getALL() {
$.ajax({
url: 'http://localhost:8080/api/GetCount',
contentType: 'application/json ; charset:utf-8',
type: 'GET',
success: function (data) {
console.log(data);
document.getElementById("messageList").innerHTML = data[0].Count;
}
});
}

当然启动集线器:var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

connection.on("ReceiveMessage", function () {
getALL();
});

connection.start().then(function () {
getALL();
connection.invoke("SendMessage").catch(function (err) {
return console.error(err.toString());
});
}).catch(function (err) {
return console.error(err.toString());
});

现在上面的代码可以工作并第一次向我显示数据,但是当我添加另一行时,什么也没有发生。我缺少什么? MS 示例中的 onclick 事件有效。但如果我尝试在没有事件的情况下加载它,则不会。

我的中心:

    public class ChatHub : Hub
{
private IHubContext<ChatHub> _hubContext;

public ChatHub(IHubContext<ChatHub> hubContext) { _hubContext = hubContext; }

public async Task SendMessage()
{
await _hubContext.Clients.All.SendAsync("ReceiveMessage");
}
}
}

我是否在错误的位置添加了 AJAX?我的集线器是否缺少实体模型?如果是这样,为什么当我调用本地 API 时会出现这种情况。

我还按照建议在 Startup.cs 文件中加载了集线器:

app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
endpoints.MapFallbackToPage("/_Host");
});

我也在尝试使用 net Core 3.1。任何建议都有帮助。我认为这将是一个简单的修改示例,但我还没有成功。谢谢大家。

最佳答案

当发生如下变化时,您需要通知中心:

connection.invoke("SendMessage").catch(function (err) {
return console.error(err.toString());
});

您不需要在启动连接后,而是在每次添加行后才需要此操作。编辑:向您展示一下需要什么:1. 您需要在 signalR-Client 中发生一个事件,其中添加行并运行之前的代码。2.您需要一个(第二个或相同的)signalR-Client,它会被通知,就像您已经拥有的那样。

如果您只直接添加一行,您将无法看到数据库中的更改。您必须在 Frontensegeln 中添加行并通知客户端应用程序中的 Hub。

关于javascript - Signal R 和 AJAX 未从 API 获取更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60270559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com