본문 바로가기

.Net

ASP.NET MVC Jsonp 사용하기

- JsonpResult Class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
/// <summary>
    /// ASP.NET MVC JsonpResult : ActionResult
    /// </summary>
    public class JsonpResult : ActionResult
    {
        public string CallbackFunction { get; set; }
        public Encoding ContentEncoding { get; set; }
        public string ContentType { get; set; }
        public object Data { get; set; }
        public JsonpResult(object data) : this(data, null) { }
 
        public JsonpResult(object data, string callbackFunction)
        {
            Data = data;
            CallbackFunction = callbackFunction;
        }
 
        public override void ExecuteResult(ControllerContext context)
        {
            if (context == nullthrow new ArgumentNullException("context");
            HttpResponseBase response = context.HttpContext.Response;
            response.ContentType = string.IsNullOrEmpty(ContentType) ? "application/x-javascript" : ContentType;
 
            if (ContentEncoding != null) response.ContentEncoding = ContentEncoding;
            if (Data != null)
            {
                HttpRequestBase request = context.HttpContext.Request;
                var callback = CallbackFunction ?? request.Params["callback"] ?? "callback";
                var serializer = new JavaScriptSerializer();
                response.Write(string.Format("{0}({1});", callback, serializer.Serialize(Data)));
            }
        }
    }
cs

 

- SampleController.GetDataSample

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class SampleController
{    
    public JsonpResult GetDataSample(String id)
    {
        Hashtable rtn = new Hashtable();
 
        rtn.Add("Code", "code");
        rtn.Add("Data", "Data");
        rtn.Add("Message", "Message");
 
        return new JsonpResult(rtn);
    }
}
 
cs

 

- Jquery Call

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var url = "http://sample/Sample/GetDataSample";
var data = { id: "1" };
 
$.ajax({
    type:"GET"
  , url: url
  , dataType: "jsonp"
  , data: data
  , cache: false
  , success: function (data, status) {
      console.log(status);
      console.log(data.Code);
      console.log(data.Data);
      console.log(data.Message);
    }
  , error: function (request, status, error) {
      console.log("error");
    }
});
cs