0

我正在尝试使用 ajax asp.net 接收 json 数据。我有一个带有网络方法的网络服务-

[WebMethod]
public List<Song> GetSongListByMood(string Mood)
{
    SongBL songbl = new SongBL();
    return songbl.GetSongListByMoodBL(Mood);
}

我得到了javascript代码-

        $(document).ready(function () {
        var cssSelector = {
            jPlayer: "#jquery_jplayer_1",
            cssSelectorAncestor: "#jp_container_1"
        };
        var playlist = [];
        var options = {
            swfPath: "./js",
            supplied: "mp3"
        };
        var myPlaylist = new jPlayerPlaylist(cssSelector, playlist, options);
        $("#slider a").click(function () {
            var mood = $(this).text();
            var xhr = new XMLHttpRequest();
            var url = "AvironaService.asmx/GetSongListByMood";
            xhr.open("POST", url, true);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var obj = JSON.parse(xhr.responseXML.text);
                    myPlaylist.playlist = obj;
                }
            };
            var contentType = "application/x-www-form-urlencoded"
            xhr.setRequestHeader("Content-Type", contentType);
            var qs = 'Mood=' + mood;
            xhr.send(qs);
        });});

现在基本上我想做的是使用 ajax 以 json 格式从服务器获取数据并将数据放入播放列表变量中

4

1 回答 1

0

您需要进行一些更改。

  1. 更改您的方法以返回 astring而不是List<Song>.

  2. 添加 using 语句using System.Web.Script.Serialization

  3. 创建一个实例JavaScriptSerializer并使用它来序列化您的对象并返回结果。

所以...

using System.Web.Script.Serialization;

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]     
public string GetSongListByMood(string Mood)
{
    SongBL songbl = new SongBL();
    var jss = new JavaScriptSerializer();
    return jss.Serialize(songbl.GetSongListByMoodBL(Mood));
}

更改您的 AJAX 代码以利用可用的 JQuery 方法:

$("#slider a").click(function () {
    $.ajax({
        "url" : "AvironaService.asmx/GetSongListByMood",
        "type" : "post",
        "data" : {"Mood" : $(this).text()},
        "dataType" : "json"
        "success" : function(data){
          myPlaylist.playlist = data;
        }
    });
});
于 2012-05-24T18:43:17.570 回答