Jay*_*Jay 2 javascript c# asp.net-mvc json signalr
我环顾了其他问题,但他们似乎没有完全回答这个问题,我正在尝试通过 JSON 将对象传递给客户端 Javascript。我正在使用 Newtonsoft.Json 来简化这个过程,但我似乎无法收到该对象。
这是代码:
建立连接后,我在客户端 javascript 中使用 start().done() 调用集线器:
//start comm with server
$.connection.hub.start().done(function () {
console.log('Grabbing playlist data');
Playlist.server.requestPlaylist();
});
Run Code Online (Sandbox Code Playgroud)
这将调用以下方法,该方法应该抓取对象并将其传回:
public void requestPlaylist()
{
var playlistData = (from c in db.Playlist where c.ID > 0 select c).Include(h => h.Song).ToList();
Playlist player = new Playlist();
foreach (var item in playlistData)
{
player.ID = item.ID;
player.Profile = item.Profile;
player.Song.ID = item.Song.ID;
player.Song.name = item.Song.name;
player.upvotes = item.upvotes;
}
string jsonObject = JsonConvert.SerializeObject(player);
Clients.All.recievePlaylist(jsonObject);
}
Run Code Online (Sandbox Code Playgroud)
所以在这里,我正在搜索数据库,获取结果并将其存储到播放列表模型中,然后使用 newtonsoft.json 将模型转换为 json 对象(其原理与他们网站上的示例大致相同)。
从中调用的客户端javascript是:
function recievePlaylist(jsonObject) {
console.log('test to recieve data: ' + jsonObject.ID + ' test.');
};
Run Code Online (Sandbox Code Playgroud)
现在只是为了测试目的,我只是退出到控制台,但是这没有任何回报:
“测试接收数据:测试。” 是它回来的方式。
我错过了什么?
因为您在将对象传递给客户端之前在服务器上将其转换为字符串,所以客户端会收到一个字符串。json 对象的字符串表示没有 ID 属性,因此该值将为“未定义”。
在客户端,您可以使用它来将字符串转换为 json 对象:
jsonObject = JSON.parse(jsonObject);
Run Code Online (Sandbox Code Playgroud)
只需将该行添加到 recievePlaylist 函数的顶部即可。
注意:您实际上不需要将服务器对象转换为服务器端的 json 字符串。SignalR 会自动将您的服务器端对象转换为客户端上的 json 对象。
| 归档时间: |
|
| 查看次数: |
6445 次 |
| 最近记录: |