我正在创建一个后端服务,该服务将新文章写入数据库,并在完成后将更改发布到前端层中的侦听客户端。我的问题是这些BE更新不会在前端层触发我的订户。
直接测试TaskHub(signalR后端asp.net集线器)层似乎可以正常工作,但是UI尚未更新。各个层的相关代码如下(我可能遗漏了一两个东西-询问是否有问题)。
事物的顺序:
从在客户端调用此命令开始:
var taskHub = $.connection.taskHub;
$.connection.hub.start();
然后我有此淘汰赛功能来进行更新:
self.AddQuickNews = function() {
taskHub.server.AddAndUpdateQuickNews(self.newContent()); /just a string
}
在ASP.NET后端上,我可以使用以下方法来解决此问题:
public void AddAndUpdateQuickNews(string newContent)
{
ArticleServices.AddQuickNews(newContent); //add a new record
var quicknews = ArticleServices.GetQuickNews(); // get all records
Clients.All.updateQuickNews(quicknews); // pass back to clients
}
在客户端上处理结果:
taskHub.client.UpdateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
XHR调用以测试后端
self.AddQuickNews = function () {
var url = 'api/MainPage/AddQuickNews';
var params = "?content=" + self.newContent();
$.ajax({
url: url + params,
type: 'GET',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
taskHub.server.updateQuickNews(data);
},
error: function () {
//alert("error");
}
});
}
我看到它的方式,是因为当您在客户端中声明侦听器时,您在第一个字母中使用了大写字母。不允许这种行为SignalR
。您必须将您的监听器更改为:
taskHub.client.updateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
taskHub.server.addAndUpdateQuickNews(self.newContent()); /just a string
希望这对您有帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句