2012-10-31

[Javascript] jQuery透過泛型處理程式ashx從後端取得JSON資料

目前jQuery最普遍使用下列兩種方式來取得後端的JSON資料:
$.getJSON('url','parameters/data',callback);
$.ajax(options);

$.getJSON()是單純只能取JSON,比較簡單。
但我比較建議使用$.ajax(),因為它的功能比較完整且彈性,而且不只能取JSON而已,以下就以簡介第二種為主。

$.ajax()基本格式如下:
$.ajax({
  url: "URL",
  data: {object},
  type: "GET",
  dataType: "json",
  contentType: 'application/json; charset=utf-8',
  success: function(Jdata) {
    alert("SUCCESS!!!");
  },  
  error: function() {
    alert("ERROR!!!");
  }
});
  • url:資料來源的網址。
  • data:物件格式。要傳給url的參數名稱和值。
  • type:以GET或是POST傳遞。
  • datatype:這裡的內容可分很多種,要看內容而定,大部份回傳的內容都是字串,所以就是text。而這裡的例子是json。
  • success/error:可有可無。用來建立成功取得資料或失敗時要執行的程式。取得JSON後如何處理JSON可以參考這裡

提供一個簡單的例子:
Javascript
$(function() {
        $("#btnAjax").click(function() {
            $.ajax({
                url: '/Sample/GetJSON.ashx',
                data: { Name: 'Tim', Year: '30' },
                type: 'GET',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function(result) {
                    alert('success! Name:' + result.Name);
                },
                error: function() {
                    alert('error');
                }
            });
        });
    });
GetJSON.ashx
public class GetJSON : IHttpHandler 
{
    public void ProcessRequest(HttpContext context)
    {
        //取得傳入的參數
        string sName = context.Request.QueryString["Name"];
        int sYear = Convert.ToInt32(context.Request.QueryString["Year"]);

        //建立要回傳的物件
        objPerson objResult = new objPerson() { Name = sName, Year = sYear };

        //將objResult物件序列化成JSON格式再回傳
        context.Response.ContentType = "application/json";
        context.Response.Charset = "utf-8";
        context.Response.Write(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(objResult));
    }

    private class objPerson
    {
        public string Name { get; set; }
        public int Year { get; set; }
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

連結aspx、asmx(web service)的說明可以觀看這篇

1 則留言: