首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Signal R和AJAX未从API获取更新

Signal R和AJAX未从API获取更新
EN

Stack Overflow用户
提问于 2020-02-18 05:21:31
回答 1查看 41关注 0票数 0

因此,我遵循了MS站点上关于构建SignalR应用程序的快速指南:SignalR App

我想我可以使用一个本地API来实时观察添加一行后计数的变化。我使用AJAX实现了以下目的:

代码语言:javascript
运行
复制
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;
    }
  });
}

当然,使用以下命令启动hub:var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

代码语言:javascript
运行
复制
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事件起作用。但如果我试图在没有事件的情况下加载它,就不会。

我的中心:

代码语言:javascript
运行
复制
    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添加到错误的位置了吗?我的hub是否缺少实体模型?如果是这样的话,当我调用本地API时为什么会这样呢?

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

代码语言:javascript
运行
复制
app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chatHub");
            endpoints.MapFallbackToPage("/_Host");
        });

我也在用net Core 3.1尝试这一点。任何建议都是有帮助的。我认为这将是一个简单的例子修改,但我还没有它的运气。谢谢你们所有人。

EN

回答 1

Stack Overflow用户

发布于 2020-02-18 05:36:09

当发生如下更改时,您需要通知集线器:

代码语言:javascript
运行
复制
connection.invoke("SendMessage").catch(function (err) {
    return console.error(err.toString());
});

而且您不是在启动连接之后需要它,而是在每次添加一行之后。Edit:向您展示一下所需的内容: 1.您需要在signalR-Client中创建一个事件,在此添加行并运行之前的代码。2.你需要一个(第二个或相同的) signalR-Client,它会被通知,就像你已经有的一样。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60270559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档