天天看點

Jquery的.post說解(一)

準備工作

·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>

轉載請注明:部落格園

繼續閱讀