Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
信号器,将对象从中心传递到客户端(MVC#)_C#_Javascript_Asp.net Mvc_Json_Signalr - Fatal编程技术网

信号器,将对象从中心传递到客户端(MVC#)

信号器,将对象从中心传递到客户端(MVC#),c#,javascript,asp.net-mvc,json,signalr,C#,Javascript,Asp.net Mvc,Json,Signalr,我已经研究了其他问题,但它们似乎没有完全回答这个问题,我正在尝试通过JSON将一个对象传递给客户端Javascript。我使用Newtonsoft.Json来简化这个过程,但我似乎无法接收对象 代码如下: 建立连接后,我使用客户端javascript中的start().done()调用集线器: //start comm with server $.connection.hub.start().done(function () { console.log('Grabbing play

我已经研究了其他问题,但它们似乎没有完全回答这个问题,我正在尝试通过JSON将一个对象传递给客户端Javascript。我使用Newtonsoft.Json来简化这个过程,但我似乎无法接收对象

代码如下:

建立连接后,我使用客户端javascript中的start().done()调用集线器:

   //start comm with server
$.connection.hub.start().done(function () {
    console.log('Grabbing playlist data');
    Playlist.server.requestPlaylist();
});
这将调用以下方法,该方法应抓取对象并将其传回:

    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);
   }
因此,在这里,我搜索数据库,获取结果并将其存储到播放列表模型中,然后使用newtonsoft.json将模型转换为json对象(其原理与他们网站上的示例大致相同)

从中调用的客户端javascript是:

function recievePlaylist(jsonObject) {
    console.log('test to recieve data: ' + jsonObject.ID + ' test.');

};
现在,出于测试目的,我只是注销到控制台,但返回时什么也没有:

“接收数据的测试:测试。”这是它返回的方式


我遗漏了什么?

因为在将对象传递给客户机之前,您在服务器上将对象转换为字符串,所以客户机会收到一个字符串。json对象的字符串表示形式没有ID属性,因此该值将为“未定义”

在客户端上,您可以使用此命令将字符串转换为json对象:

jsonObject = JSON.parse(jsonObject);
只需将该行添加到ReceivePlaylist函数的顶部即可


注意:实际上不需要在服务器端将服务器对象转换为json字符串。SignalR会在客户端自动将服务器端对象转换为json对象。

如果调用WebAPI并在客户端(JavaScript/jQuery)接收json响应/结果。对于signar或WebAPI来说,解析jsone响应和将其用作对象的方法都是通用的

var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" );

您不需要在
receivePlaylist()
中首先
eval(jsonObject)
吗?您在receivePlaylist函数中看过jsonObject了吗?它包含任何东西吗?顺便说一句,你的“player”对象在foreach循环中被多次覆盖-你确定这就是你计划的吗?