ASP.NET MVC 3 에서 Jsonp 예제 by Sikuru

아래 포스팅의 JSONP 적용 예제

* C# 코드
1
public class TestServiceController : Controller
2 {
3 [HttpPost]
4 public ActionResult Method2()
5 {
6 List<TestData1> data = new List<TestData1>();
7 data.Add(new TestData1()
8 {
9 Name = "이름",
10 UID = long.MaxValue,
11 ID = "sikuru",
12 Time = DateTime.Now,
13 });
14 data.Add(new TestData1()
15 {
16 Name = "이름2",
17 UID = long.MinValue,
18 ID = "sikuru2",
19 Time = DateTime.Now,
20 });
21
22 return Common.JsonpResult.Jsonp(data, JsonRequestBehavior.DenyGet);
23 }
24 }

* Javascript 코드 (jQuery)
1
$("#button2").click(function() {
2 $.ajax({
3 url: "/TestService/Method2",
4 type: "POST",
5 dataType: "jsonp",
6 success: function (data) {
7 //alert(data);
8 var output_data = "";
9 for (var item in data)
10 {
11 for (var key in data[item])
12 {
13 if (key == "Time")
14 {
15 var date = new Date(parseInt(data[item][key].substr(6)));
16 output_data += "KEY=" + key + " / DATE_VALUE=" + date + "<br>";
17 }
18 else
19 {
20 output_data += "KEY=" + key + " / VALUE=" + data[item][key] + "<br>";
21 }
22 }
23 }
24
25 $("#output1").append(output_data);
26 }
27 });
28 }); // button2 click

공유하기 버튼

 
싸이월드 공감트위터페이스북

ASP.NET MVC 3 에서 Jsonp 응답을 위한 간단 클래스 by Sikuru

jQuery ajax 등을 이용해서 Jsonp 요청을 했을 때, MVC 3 에서 응답용으로 사용하기 위한 클래스...
Jsonp 에 관한 내용은 두 링크 참조
* JSONP를 사용한 도메인 간 통신, Part 1: JSONP와 jQuery의 결합으로 강력한 매시업 빠르게 만들기
* JSONP

1 public class JsonpResult : JsonResult
2 {
3 public static JsonpResult Jsonp(object data)
4 {
5 return new JsonpResult()
6 {
7 Data = data,
8 };
9 }
10
11 public static JsonpResult Jsonp(object data, JsonRequestBehavior json_request_behavior)
12 {
13 return new JsonpResult()
14 {
15 Data = data,
16 JsonRequestBehavior = json_request_behavior,
17 };
18 }
19
20 public string Callback { get; set; }
21
22 public override void ExecuteResult(ControllerContext context)
23 {
24 if (context == null)
25 {
26 throw new ArgumentNullException();
27 }
28
29 if (Callback == null)
30 {
31 Callback = context.HttpContext.Request.QueryString["callback"];
32 }
33
34 context.HttpContext.Response.ContentType = "application/javascript";
35
36 if (ContentEncoding != null)
37 {
38 context.HttpContext.Response.ContentEncoding = ContentEncoding;
39 }
40
41 if (Data != null)
42 {
43 JavaScriptSerializer jss = new JavaScriptSerializer();
44 StringBuilder sb = new StringBuilder();
45
46 sb.Append(Callback);
47 sb.Append("(");
48 jss.Serialize(Data, sb);
49 sb.Append(");");
50
51 context.HttpContext.Response.Write(sb.ToString());
52 }
53 }
54 }

공유하기 버튼

 
싸이월드 공감트위터페이스북

ASP.NET MVC 3 와 Ajax 를 통한 JSON 통신 by Sikuru

ASP.NET MVC 3 부터는 JSON 을 통한 연동 부분이 매우매우 편리해진 덕에 이런 간단한 코드로 연동 코드가 가능...
친절하게도 배열로 된 JSON 오브젝트는 List 컨테이너에 담아주기까지 하고, 같은 이름을 가진 클래스에 맵핑까지 해준다. (대소문자 구분 안함)


* Javascript 코드
  1
$("#button1").click(function()
  2 {
  3     // 테스트 JSON 오브젝트 배열.
  4     var obj = [{
  5         name: "sikuru ?",
  6         uid: 49392010,
  7     }, {
  8         name: "시쿠루 ?",
  9         uid: 49392011,
 10     }];
 11
 12     $.ajax({
 13         url: "/TestService/Method1",
 14         type: "POST",
 15         data: JSON.stringify(obj),
 16         contentType: "application/json; charset=utf-8",    // 이걸 빼먹으니 인식이 안되더라...
 17         success: function (data){
 18             var output_data = "";
 19             for (var item in data)
 20             {
 21                 for (var key in data[item])
 22                 {
 23                     if (key == "Time")
 24                     {
 25                         // 뭔가 이상해보이기도 하지만... JSON 에 넘어온 시간값을
 26                         // Javas-ript 의 Date 객체로 전환하는 방법 중 하나... 근데 이래도 되나 ?
 27                         var date = new Date(parseInt(data[item][key].substr(6))); 
 28                         output_data += "KEY=" + key + " / DATE_VALUE=" + date + "<br>";
 29                     }
 30                     else
 31                     {
 32                         output_data += "KEY=" + key + " / VALUE=" + data[item][key] + "<br>";
 33                     }
 34                 }
 35             }
 36
 37             $("#output1").append(output_data);
 38         }
 39     });
 40 });

* C# ASP.NET MVC 3 코드
  1 public class TestData1
  2 {
  3     public string Name { getset; }
  4     public long UID { getset; }
  5     public string ID { getset; }
  6     public DateTime Time { getset; }
  7 }
  8
  9 public class TestServiceController : Controller
 10 {
 11     [HttpPost]
 12     public ActionResult Method1(List<TestData1> recv_data)
 13     {
 14         List<TestData1> data = new List<TestData1>();
 15         data.Add(new TestData1()
 16         {
 17             Name = "이름",
 18             UID = long.MaxValue,
 19             ID = "sikuru",
 20             Time = DateTime.Now,
 21         });
 22
 23         return Json(data, JsonRequestBehavior.DenyGet);
 24     }
 25 }

공유하기 버튼

 
싸이월드 공감트위터페이스북

공지사항 및 안내 #2 by Sikuru

공지사항 및 안내 등등을 언젠가 업데이트 하겠습니다. (...)
링크 하신 것을 알려주시거나 방명록 용도로 사용해 주세요. =)

공유하기 버튼

 
싸이월드 공감트위터페이스북

2011년 주유 기록 결산 by Sikuru

2011년간 출퇴근으로 쓰면서 주유한 기록을 정산해봤습니다.

총 주행거리 ; 25940.9km
총 주유량 ; 2025리터
총 주유비용 ; 358만2864원
평균 연비 ; 리터당 12.8km

...하루 100km 짜리 출퇴근을 하고 있으니 은근 압박이네요. ( -_-)
여러가지 의미에서 디젤차를 타서 다행이야. 라고 생각합니다. (...)

수동차량이면 좋았을텐데. 라는 생각을 조금(사실 좀 많이-_-) 하고 있습니다.

공유하기 버튼

 
싸이월드 공감트위터페이스북

1 2 3 4 5 6 7 8 9 10 다음