SPRING

[ajax] 키:값 배열 객체에 담고 배열로 순환 사용

silver-w 2024. 12. 11. 16:50

서버 -> 클라이언트(JSP)

'키 : 값' 형태인 JSON을 직관적이게 배열에 담으려면 컨트롤러에서 List<Map<String, Object>> 

[쿼리 결과] 

 

(1) Back 결과를 객체에 담아 배열에 담기

let objArr =new Array; // 배열 선언

$.ajax({
      url : "/mbti",
      method : "post"
   }).done(function(result) {
   
   	 // Json 객체를 JS 객체에 담기
     $(result).each(function(index, item) { 
        let one = {
           no : item.no,
           name : item.name,
           mbti : item.mbti,
        };
        
    // JS 객체를 배열에 담기  
    objArr.push(one);
 });

 

(2) 객체를 담은 배열을 JS 에서 사용

 

$(objArr).each(function(index, item) {
     $(`#btnQ\${item.no}`).click(function() {
                console.log($(`.q\${item.no}:checked`).val());

                   if(item.mbti == $(`.q\${item.no}:checked`).val()) {
                       console.log("right");
                      $('#score').val(Number($('#score').val()) + 1);
                      $(`#resultQ\${item.no}`).val('정답');
                   } else {
                       console.log("nah");
                      $(`#resultQ\${item.no}`).val('오답');
                   }
                   $(`#btnQ\${item.no}`).attr('disabled', false);
              }); 
          });
      })
  });

 

 

※ 참고

$(`#btnQ\${item.no}`)
 : JS : 함수표현식 사용은 벡틱 사용하면 된다.  `.... ${}`와 같이 ${}을 문자열 내에 사용 가능  
 :  단, 뷰가 HTML이 아니라 JSP 일때는 이스케이프 필요 `....\${}`

 

 

 

※ myBatis 쿼리 설계시 주의

 

[정적 데이터]

(성별) 남 여 

(월) 1월.... 11월 12월 

 

[동적 데이터]

(연) 23년 24년.....

(시간) 1시간, 2시간....

 

컬럼명에 데이터를 넣는 경우 

 - 컬럼명의 데이터가 동적이 아니다 

 - 컬럼명의 데이터를 사실상 뷰에서 사용하지 않는다.

위 경우가 아니라면 프론트 단에서 해당 데이터를 출력하기에는 어렵다고 생각하면 된다. 

 

실질적으로 뷰에서 사용하는 데이터는 속성이 아닌 인스턴스로 생성하자.

(for in) 문법을 사용하면 어쨋든 출력은 되지만, 모델로 사용할 부분이 통일성이 없어진다.

 

※ 아래의 경우, 0hour ~ 3hour을 고정시켜서 각 시간대에 매칭되는 건수를 출력하였다, 

컬럼명에 실질적으로 뷰에서 사용하는 데이터를 밀어 넣었으니, 모델 (인스턴스) 인 부분이 왜곡된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

쿼리 설계 

(1) 뷰에서 어떻게 쓸건지 먼저 구체화 

(2) 실질적인 값은 모두 인스턴스 값으로 배치 

(3) [{객체1}, {객체2}, {객체3}] 형태는 지양 ( 뷰에서 배열(인덱스).객체(키) 를 사용하기에는 어려움 )

Map<T> 형태 보다는 List<Map<T>> 형식으로 설계 하는게 

(=모든 값을 인스턴스레이어에 배치(모델레이어의 경계선은 디그리 레이어가 아니라 인스턴스 레이어이다)