首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

jQuery + JSON + WebService 交互完整指南:參數傳遞、復雜類型與序列化真相

     編輯:ASP.NET 基礎

環境與前提

  • jQuery 1.4.2,Visual Studio 2008 SP1
  • WebService 方法標記 [WebMethod],返回 JSON 需設置 contentType: "application/json; charset=utf-8"
  • 調用必須用 POST,data 必須是 JSON 字符串(非 JS 對象)

測試一:簡單參數類型

[WebMethod] public string GetString(string name) { return "Hello " + name; }

// jQuery
$.ajax({
    type: "POST", url: "WebService1.asmx/GetString",
    dataType: "json", contentType: "application/json; charset=utf-8",
    data: "{'name':'zhangsan'}", // 單引號包裹鍵值,整體為字符串
    success: function(json) { alert(json.d); } // ASP.NET 返回 JSON 包裝在 .d 中
});

測試二:復雜參數類型(自定義實體)

public class Person { public string Name {get;set;} public int Age {get;set;} ... }
[WebMethod] public string ProcessPersonalInfo(Person person) { return person.Name + person.Tel; }

// jQuery: 參數名必須與 WebService 參數名一致 (person)
data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing','Tel':'01082658866'}}"

ASP.NET 自動將 JSON 反序列化為 Person 實例。

測試三:復雜返回類型

[WebMethod] public List<Person> GetPersonalList() { ... return list; }

// jQuery 遍歷返回數組
success: function(json) { $(json.d).each(function() { alert(this.Name + " - " + this.Age); }); }

測試四:返回單個實體(無 Serializable 標記)

[WebMethod] public Person GetPerson() { return new Person { Name="zhangshan", ... }; }

// jQuery 直接訪問屬性
success: function(json) { var p = json.d; alert(p.Name + " " + p.Age); }

結論:WebService 返回類型不必標記 [Serializable] 也能正常 JSON 序列化。ASP.NET 內置 JavaScriptSerializer 能處理公共屬性的類。

測試五:返回 Hashtable(實現 IDictionary)

[WebMethod] public Hashtable GetPersonalHashtable() { ... return ht; }

// jQuery 遍歷
success: function(json) { for(var key in json.d) { alert(key + ":" + json.d[key].Name); } }

雖然傳統認爲實現 IDictionary 的類型不能直接作為 WebService 返回值,但實測在 JSON 協議下可正常工作(ASP.NET 將其序列化為鍵值對象)。

總結

  1. contentType: "application/json; charset=utf-8" 必須指定。
  2. 復雜返回類型不要求 [Serializable]。
  3. 返回數據通過 json.d 獲取(ASP.NET AJAX 包裝格式)。
  4. 參數名必須與服務端參數名完全一致,大小寫敏感。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved