jQuery提交Json數據到Webservice,並接收返回的Json數據

jQuery ajax webservice:get 和 postweb

1、GET 方式 客戶端ajax

複製代碼 代碼以下:
var data = { classCode: "0001"}; // 這裏要直接使用JOSN對象 $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", url: "/WebServices/ProductPropertyWebService.asmx/GetProductPropertyList", dataType: "json", anysc: false, data: data, success: RenderProperties, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown + ':' + textStatus); // 錯誤處理 } });

服務器端 代碼json

複製代碼 代碼以下:
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] //UseHttpGet = true public List<Property> GetProductPropertyList() { string classCode = HttpContext.Current.Request["classCode"]; // Get 方式,要在查詢字符串裏獲得參數值 return PropertyManager.GetPropertySet(classCode, "zh-CN").DataList; }

2、POST 方式 客戶端 代碼服務器

複製代碼 代碼以下:
var data = '{ classCode: "' + classCode + '", city: "GuangDong" }'; // 這裏要使用拼接好的JOSN字符串 $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "/WebServices/ProductPropertyWebService.asmx/GetProductPropertyList", dataType: "json", anysc: false, data: data, // Post 方式,data參數不能爲空"",若是不傳參數,也要寫成"{}",不然contentType將不能附加在Request Headers中。 success: RenderProperties, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown + ':' + textStatus); // 錯誤處理 } });

服務器端 代碼app

複製代碼 代碼以下:
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)] // UseHttpGet = false public List<Property> GetProductPropertyList(string classCode, string city) // Post 方式,參數對應JSON字段屬性,並自動賦值直接使用 { return PropertyManager.GetPropertySet(classCode, "zh-CN").DataList; }

注意:GET方法與POST方法不一樣,有參數的時候,若是參數的值不是ASCII字符(好比中文),GET的參數要encodeURI編碼,要不服務端接收到的數據爲亂碼。 複雜的Json數據提交 簡單的Json 格式的數據如 { name:Yangjun, age:27 } 複雜的Json格式的數據,其實只是Json嵌套,好比: {name:yangjun, age:27, child:[{name:yangke, age:1},{name:yangbin, age:2}]} 若是是這種複雜的Json格式的數據要提交,並在Webservices中獲取,而後根據這個Json格式的字符串,序列成.net對象,應該怎麼作呢? 好比我要提交下面的數據: 客戶端: 代碼post

複製代碼 代碼以下:
var productPropertyTemplate = {"ProductId":10024, "PropertyList":[ {"PropertyId":18, "PropertyType":"text", "PropertyValue":"號碼是100"}, {"PropertyId":19, "PropertyType":"checkbox", "PropertyValue":"57|28"}]} $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", url: "/WebServices/ProductPropertyWebService.asmx/PostProductPropertyList", anysc: false, data: { propertyList: productPropertyTemplate }, dataType: "json", success: function (result) { alert(result.d) }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown + ':' + textStatus); } });

服務器端: 一、要反序列化Json字符爲.net對象,有比較多的開源類庫,我使用的是.net 3.5版本以上自帶的DataContractJsonSerializer,寫一個輔助類: 代碼ui

複製代碼 代碼以下:
/// <summary> /// Json序列化和反序列化的幫助方法 /// </summary> public class JsonHelper { /// <summary> /// JSON序列化:把對象序列化成Json格式的字符串 /// </summary> public static string JsonSerializer<T>(T t) { var ser = new DataContractJsonSerializer(typeof(T)); var ms = new MemoryStream(); ser.WriteObject(ms, t); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return jsonString; } /// <summary> /// JSON反序列化:根據Json格式的字符串,反序列化成對象 /// </summary> public static T JsonDeserialize<T>(string jsonString) { var ser = new DataContractJsonSerializer(typeof(T)); var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); var obj = (T)ser.ReadObject(ms); return obj; } }

二、由於要反序列化成相應的對象,因此先構造兩個對象類,注意每一個類和類的字段前面的特性修改符: 代碼編碼

複製代碼 代碼以下:
[DataContract] public class MProductProperty { [DataMember(Order = 0, IsRequired = true)] public int ProductId { set; get; } [DataMember(Order = 1, IsRequired = true)] public List<MProperty> PropertyList { set; get; } } public class MProperty { [DataMember(Order = 0, IsRequired = true)] public int PropertyId { set; get; } [DataMember(Order = 1, IsRequired = true)] public string PropertyType { set; get; } [DataMember(Order = 2, IsRequired = true)] public string PropertyValue { set; get; } }

三、接收並處理Json數據的Web方法: 代碼url

複製代碼 代碼以下:
[WebMethod] [ScriptMethod(UseHttpGet = true)] public string PostProductPropertyList() { string jsonString = HttpContext.Current.Request["propertyList"]; var productProperty = JsonHelper.JsonDeserialize<MProductProperty>(jsonString); // productProperty 成功反序列化成MProductProperty的對象 //返回接收成功標識 return "postsuccess"; }
相關文章
相關標籤/搜索