2012-05-24 71 views
0

我正在嘗試使用ajax asp.net接收json數據。 我有一個Web方法Web服務 -通過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格式並將數據放入播放列表變量中

+1

那麼,有什麼問題?爲什麼不使用jQuery的內置$ .ajax方法?它將大部分ajax代碼封裝在一個方法中。 http://api.jquery.com/jQuery.ajax/ – Marko

+0

哦,對不起,忘了說這個問題,我收到一個空的數據 – user1415791

+0

我會從一個工具,如Fiddler2的Firebug開始,看看你得到的迴應是什麼是... – Marko

回答

0

您需要進行一些更改。

  1. 更改方法返回的string代替List<Song>

  2. 添加使用語句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; 
     } 
    }); 
}); 
+0

嗯,謝謝,但它仍然無法正常工作。 – user1415791

+0

如果你在你的方法中設置了一個斷點,你是否恰當地通過了你的心情? – marteljn

+0

是的..我正確地傳達了心情。 – user1415791