準備工作
·Customer類
public class Customer
{
public int Unid { get; set; }
public string CustomerName { get; set; }
public string Memo { get; set; }
public string Other { get; set; }
}
jQuery.post( url, [data], [callback], [type] )
·url:加載頁的位址
·data(optional):k/v對或序列化的字元串(.serialize()),參數
·callbakc(optional):資料成功加載後的執行函數
·type(optional):請求傳回的資料格式,串型
(一)ashx檔案
(1)請求單實體資料
·Ashx檔案,這裡不對傳回的資料做顯式的序列化。
Customer customer = new Customer
{ Unid = 1, CustomerName = "宋江", Memo = "天魁星", Other = "黑三郎" };
context.Response.Write(customer);
·ajax post
function GetCustomer_Ashx() {
$.post(
"webdata/post_1.ashx",
function(data) {
var sx = $.JsonToObject(data);
var tt = "";
$.each(sx, function(k, v) {
tt += k + ":" + v + "<br/>";
})
$("#divmessage").html(tt);
},
"json"
);}
(2)請求實體集合
·ashx檔案
{ Unid = 1, CustomerName = "宋江", Memo = "天魁星", Other = "黑三郎" };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = "吳用", Memo = "天機星", Other = "智多星" };
List<Customer> _list = new List<Customer>();
_list.Add(customer);
_list.Add(customer2);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(_list);
context.Response.Write(strJson);
function GetCustomer_AshxList() {
var jsonObjects = $.jsonToObject(data);
$.each(jsonObjects, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + ":" + vv + "<br/>";
});
});
);
(3)帶參數的請求
在前者基礎上添加了對請求參數的擷取語句,并添加了linq查詢
int iCustomerId = Convert.ToInt32(context.Request["iUnid"]);
var cus = from q in _list
where q.Unid == iCustomerId
select q;
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(cus);
function GetCustomer_AshxWithPara() {
{ iUnid: 1 },
$.each(data, function(k, v) {
注意,這裡傳回的直接是json對象[object,object],可以直接解析。
這種參數傳遞的方法是以k/v對格式傳遞,post還有一種方式,那就是.serialize()之後的字串。
(二)Web Service
(1)Hello
·ws
[WebMethod]
public string HelloWorld()
return "Hello World";
function WebService_Hello() {
"post_1.asmx/HelloWorld",
alert(data.text);
$("#divmessage").html(data);
這個web方法傳回一個單獨的字串。這是一個純正的字串,對于用戶端來說,這是一個object對象,但也可以了解為一個[object,object]對象,而它完整的資料格式可以了解為:{text: "Hello World"}
是以這裡對它進行通路,可以如下:
·data.text 這種方式對應于Object.Property
·data["text"] 這種方式對應于Object["key"]
(2)json串
public string HelloWorld_Json()
string strJson=
@"{Unid:1,CustomerName:""宋江"",Memo:""天魁星"",Other:""黑三郎""}";
return strJson;
function WebService_HelloJsonString() {
"post_1.asmx/HelloWorld_Json",
var jsonString = data.text;
var jsonObject = $.jsonToObject(jsonString);
$.each(jsonObject, function(k, v) {
雖然服務方法傳回的是string類型的資料:
{Unid:1,CustomerName:"宋江",Memo:"天魁星",Other:"黑三郎"}
但用戶端得到的資料卻是object類型,可以了解為[object,object],也就是
{text:’{Unid:1,CustomerName:"宋江",Memo:"天魁星",Other:"黑三郎"}’}
用戶端請求到的資料取到json字串,然後轉換為json對象,後進行解析。
是以,在請求web服務方法時,如果方法傳回字串類型,先要通過data.text得到做為唯一k/v對的v值,也就是json字串,然後再進行下一步操作。
(3)通過串行化傳回json字串的web方法
public string GetCustomer_Json()
Customer customer = new Customer
{ Unid = 1, CustomerName = "宋江", Memo = "天魁星", Other = "黑三郎" };
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(customer);
function WebService_CustomerJsonString() {
"post_1.asmx/GetCustomer_Json",
這個方法與(2)相同道理。
(4)客戶集
public string GetCustomerList_Json()
Customer customer = new Customer
{ Unid = 1, CustomerName = "宋江", Memo = "天魁星", Other = "黑三郎" };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = "吳用", Memo = "天機星", Other = "智多星" };
List<Customer> _list = new List<Customer>();
_list.Add(customer);
_list.Add(customer2);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(_list);
return strJson;
function WebService_CustomerListJsonString() {
"post_1.asmx/GetCustomerList_Json",
其實得到了json字串,也就能正常解析出來。主要是了解傳回的資料對象的格式。
(5)帶參數的ws
public string GetCustomerList_JsonPara(int iUnid)
where q.Unid == iUnid
select q;
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(cus);
·ajax post
function WebService_CustomerListJsonStringWithPara() {
$.post("post_1.asmx/GetCustomerList_JsonPara",
{iUnid:2},
$.each(v, function(kk, vv) {
tt += kk + ":" + vv + "<br/>";
$("#divmessage").html(tt);
}
);}
帶參數的post時,post函數的type部分不能以json格式請求傳回。可以省略。
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園