在 SingalR Javascript 客户端中解析数据库记录
Parsing Database Record in SingalR Javascript Client
我正在学习 ASP.NET Core SignalR。我在 MVC 框架下编写了一个与 SQLite 数据库交互的基本程序。该程序允许用户对数据库执行 CRUD 操作。我在程序中引入了 SignalR hub。服务器定期从数据库中获取记录列表,并使用 hub SendAsync 函数推送到客户端。在 Javascript 集线器客户端中,我正在尝试解析(并显示)收到的消息。一切正常(从数据库获取项目列表,通过集线器发送)除了访问项目的元素时我收到 undefined 消息,尽管从数据库中检索了三个具有有效值的项目分配给每个元素。
数据库的 Schema(在“Models”文件夹下):
public class IenState
{
public int Id { get; set; }
public ulong NetId { get; set; }
public ushort NodeId { get; set; }
}
从集线器的服务器端发送消息:
var ienStates = from m in dbcontext.IenState select m;
var listdb = await ienStates.ToListAsync(); //here 3-items recovered
await hubContext.Clients.All.SendAsync("IenStateDb", listdb);
Javascript 集线器客户端(名为IenStateHub.js):
const connection = new signalR.HubConnectionBuilder()
.withUrl("/ienStateHub")
.configureLogging(signalR.LogLevel.Information)
.build();
connection.start().then(function () {
document.getElementById("p_nets").innerHTML = "IenStateHub is 'CONNECTED'";
});
connection.on("IenStateDb", function(message){
var dbitem;
for (dbitem in message)
{
document.getElementById("p_nets").innerHTML = "NetId:" + dbitem.NetId;
}
});
其中“p_nets”是“Index.cshtml”中的一个 HTML 元素。中心客户端 (IenStateHub.js) 附加在 Index.cshtml 的末尾,如下所示:
<script src="~/lib/signalr/signalr.js"></script>
<script src="~/js/IenStateHub.js"></script>
如果能帮助解决此解析问题,我们将不胜感激。
试试这个在客户端检查您的消息:
connection.on("IenStateDb", function(message) {
message.forEach(function(dbitem, index, array) {
console.log(dbitem);//should output your db item into the browser console.
//document.getElementById("p_nets").innerHTML = "NetId:" + dbitem.NetId;
});
});
以下方法有效:
$.each(message, function(index, obj) {
console.log( index + ": " + obj );
$.each(obj, function( key, value ) {
console.log( key + ": " + value );
});
});
这是基于 link 中描述的一种方法(@Roman Koliada 提到)。
现在我不确定这是否是访问每个 item/object 中不同元素的最有效方法。
我正在学习 ASP.NET Core SignalR。我在 MVC 框架下编写了一个与 SQLite 数据库交互的基本程序。该程序允许用户对数据库执行 CRUD 操作。我在程序中引入了 SignalR hub。服务器定期从数据库中获取记录列表,并使用 hub SendAsync 函数推送到客户端。在 Javascript 集线器客户端中,我正在尝试解析(并显示)收到的消息。一切正常(从数据库获取项目列表,通过集线器发送)除了访问项目的元素时我收到 undefined 消息,尽管从数据库中检索了三个具有有效值的项目分配给每个元素。
数据库的Schema(在“Models”文件夹下):
public class IenState
{
public int Id { get; set; }
public ulong NetId { get; set; }
public ushort NodeId { get; set; }
}
从集线器的服务器端发送消息:
var ienStates = from m in dbcontext.IenState select m;
var listdb = await ienStates.ToListAsync(); //here 3-items recovered
await hubContext.Clients.All.SendAsync("IenStateDb", listdb);
Javascript 集线器客户端(名为IenStateHub.js):
const connection = new signalR.HubConnectionBuilder()
.withUrl("/ienStateHub")
.configureLogging(signalR.LogLevel.Information)
.build();
connection.start().then(function () {
document.getElementById("p_nets").innerHTML = "IenStateHub is 'CONNECTED'";
});
connection.on("IenStateDb", function(message){
var dbitem;
for (dbitem in message)
{
document.getElementById("p_nets").innerHTML = "NetId:" + dbitem.NetId;
}
});
其中“p_nets”是“Index.cshtml”中的一个 HTML 元素。中心客户端 (IenStateHub.js) 附加在 Index.cshtml 的末尾,如下所示:
<script src="~/lib/signalr/signalr.js"></script>
<script src="~/js/IenStateHub.js"></script>
如果能帮助解决此解析问题,我们将不胜感激。
试试这个在客户端检查您的消息:
connection.on("IenStateDb", function(message) {
message.forEach(function(dbitem, index, array) {
console.log(dbitem);//should output your db item into the browser console.
//document.getElementById("p_nets").innerHTML = "NetId:" + dbitem.NetId;
});
});
以下方法有效:
$.each(message, function(index, obj) {
console.log( index + ": " + obj );
$.each(obj, function( key, value ) {
console.log( key + ": " + value );
});
});
这是基于 link 中描述的一种方法(@Roman Koliada 提到)。
现在我不确定这是否是访问每个 item/object 中不同元素的最有效方法。