더북(TheBook)

2. Maxim 폴더에 MaximCrudWithJavaScriptQuery.html이란 이름으로 HTML 문서를 생성하고 앞서 구현한 Web API를 제이쿼리를 사용해서 SPA로 표현해보자. 이에 대한 교과서다운 코드를 다음과 같이 작성한다.

▼  /Maxim/MaximCrudWithJavaScriptQuery.html

<!DOCTYPE html>
<html>
<head>
  <meta charset=“utf-8” />
  <title>jQuery와 ASP.NET Web API를 사용한 CRUD 구현하기</title>
  <script src=”/Scripts/jquery-1.10.2.min.js></script> ►버전 주의
  <script type=“text/javascript”>
      // ASP.NET Web API와 jQuery Ajax를 사용한 CRUD 기능 구현
      
      // Web API 주소
      var API_URL = ”/api/maximservice/”;
      
      // 상태 클리어
      function clearStatus() {
          $(”#lblError”).html();
      }
      function clearField() {
          $(”#name”).val();
          $(”#content”).val();
      }
      
      // [!] 데이터 조회 전용 함수
      function displayData() {
          $(’#lstMaxims’).html();
          // cRud : Read
          // 전체 명언 리스트를 읽어서 출력
          $.getJSON(API_URL, function (data) {
              // console.log(data.length); // 데이터의 개수
              $.each(data, function (key, val) {
                  var str = val.id + ”, “ + val.name + ”, “ + val.content;
                  $(“<li />“, { html: str }).appendTo(”#lstMaxims”);
              });
          });
      }
      
      // Page_Load
      $(function () {
          
          // 전체 레코드 출력
          displayData();
          
          // Crud : Create
          $(”#btnAdd”).click(function () {
              clearStatus();
              // [a] 데이터 받기
              var name = $(’#name’).val();
              var content = $(’#content’).val();
              // [b] JSON 개체로 묶기 : “ + 변수 + “
              var json =
                  ”{name:\“” + name + “\“, content:\“” + content + “\“}”;
              // [c] 전송
              $.ajax({
                  url: API_URL,
                  cache: false,
                  type: ‘POST’,
                  contentType: ‘application/json; charset=utf-8’,
                  data: json,
                  statusCode: {
                      201: function (data) {
                          var str = data.id + ”, “ + data.name
                              + ”, “ + data.content;
                          $(“<li />“, { html: str }).appendTo(”#lstMaxims”);
                      }
                  }
              });
              clearField();
          });
          
          // cRud : Retrieve(조회)
          $(”#btnFind”).click(function () {
              clearStatus();
              clearField();
              // id값 가져오기
              var id = $(”#id”).val();
              // 특정 번호에 해당하는 명언 정보를 읽어서 출력
              $.getJSON(API_URL + id, function (data) {
                  $(”#name”).val(data.name);
                  $(”#content”).val(data.content);
              }).fail(function (xhr, sts, err) {
                  $(”#lblError”).html(“에러 : “ + err);
              });
          });
          
          // crUd : PUT
          $(”#btnUpdate”).click(function () {
              clearStatus();
              // [!] ID 값 받기
              var id = $(”#id”).val();
              // [a] 데이터 받기
              var name = $(’#name’).val();
              var content = $(’#content’).val();
              // [b] JSON 개체로 묶기 : “ + 변수 + “
              var json =
                  ”{id:\“” + id + “\“, name:\“” + name + “\“, content:\“”
                  + content + “\“}”;
              // [c] 전송
              $.ajax({
                  url: API_URL + id, // /api/maximservice/3
                  cache: false,
                  type: ‘PUT’,
                  contentType: ‘application/json; charset=utf-8’,
                  data: json,
                  success: function () {
                      displayData(); // 데이터가 수정되었으면 다시 출력
                  }
              }).fail(function (xhr, textStatus, err) {
                  $(’#lblError’).html(“에러 : “ + err);
              });
              clearField();
          });
          
          // cruD : DELETE
          $(”#btnDelete”).click(function () {
              clearStatus();
              // [!] ID 값 받기
              var id = $(”#id”).val();
              // [c] 전송
              $.ajax({
                  url: API_URL + id, // /api/maximservice/3
                  cache: false,
                  type: ‘DELETE’,
                  contentType: ‘application/json; charset=utf-8’,
                  data: {},
                  success: function () {
                      displayData();
                  }
              }).fail(function (xhr, textStatus, err) {
                  $(”#lblError”).html(“에러 : “ + err);
              });
              clearField();
          });
      }); // end of Page_Load
  </script>
</head>
<body>
  <h2>명언 리스트</h2>
  <div>
      <h3>명언 리스트</h3>
      <ul id=“lstMaxims”></ul>
  </div>
  <div>
      <h3>명언 상세</h3>
      <div>
          <label for=“id”>번호: </label>
          <input type=“text” name=“id” id=“id” value=”” />
      </div>
      <div>
          <label for=“name”>이름: </label>
          <input type=“text” name=“name” id=“name” value=”” />
      </div>
      <div>
          <label for=“content”>내용: </label>
          <input type=“text” name=“content” id=“content” value=”” />
      </div>
      <div>
          <input type=“button” name=“btnAdd” id=“btnAdd” value=“추가” />
          <input type=“button” name=“btnFind” id=“btnFind”
                 value=“찾기(번호검색)” />
          <input type=“button” name=“btnUpdate” id=“btnUpdate” value=“수정” />
          <input type=“button” name=“btnDelete” id=“btnDelete” value=“삭제” />
      </div>
  </div>
  <div>
      <p id=“lblError” style=“color:red;”></p>
  </div>
</body>
</html>

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.