일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- javascript콤마
- 즐겨찾기 비동기처리
- 기상청api
- 카카오지도
- jquery 달력 월만
- 날씨api
- 카카오지도api다중마커
- 콤마찍기
- 지도api
- API
- JavaScript
- OpenAPI
- 함수
- 지도 다중마커
- jqueryui달력
- spring
- jQuery
- 즐겨찾기버튼
- jquery monthpicker
- jquery 달력
- 더보기버튼
- ajax
- 다음카카오지도api
- 스프링 하트버튼
- Java
- 스프링 즐겨찾기
- 즐겨찾기
- Today
- Total
뚜피치의 개발공부
Ajax처리를 통한 즐겨찾기 갯수 나타내주기 / 더보기 버튼만들기 (JavaScript, Ajax, Spring) 본문
Ajax처리를 통해 즐겨찾기 갯수 나타내기
&
더보기 버튼 만들기
최종 프로젝트 진행하면서 부족한 나의 머리로 조금은 애먹었던 부분이다.
위시리스트를 나타내어 주는건데, 시/구 정도까지 나눈뒤에 그 분류별로 메인에 나타내어 주고,
클릭해주면 그 안에 그 지역의 숙소들이 들어가게끔 구현하는 부분이었는데, Ajax를 능숙하게 사용하지 못할 때여서 조금 애먹었었다.
대략의 코드를 보면,
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 | <script> $(document).ready(function() { var wishList = $('.wishAddress'); var arr = []; for (var i = 0; i < wishList.length; i++) { arr.push($("input[name='address']").eq(i).val()); } var jsonInfo = JSON.stringify(arr); for (var j = 0; j < wishList.length; j++) { $("span[id='idx']").eq(j).addClass("wishIdx" + j); } $.ajax({ type : 'post', url : '${pageContext.request.contextPath}/wishCnt', contentType : 'application/json', data : jsonInfo, success : function(response) { var obj = JSON.parse(response); $.each(obj, function(key, val) { for (var i = 0; i < wishList.length; i++) { var loc = $("input[name='address']").eq(i).val(); if (loc == key) { $('.wishIdx' + i).text(val); } } }); } }); }); </script> |
이렇게 처리해주게 되는데, DB에서 나의 위시리스트를 가져오고, view단에서 forEach문을 통해 각각의 DIV를 만들어 뿌려주고,
각각의 주소는 다시 스크립트단에서 배열에 담아주게 된다! 그리구 그 배열은 JSON타입의 문자열로 바꿔준다!
음 두번째 for문은 각각 위시리스트 갯수를 담아줄 span태크에 클래스를 추가해주는 코드다!
ajax 부분을 보게되면 post방식으로 컨트롤러로 넘기게 되고, 이때, data를 json타입의 문자열로 바꿔준 주소배열을 보내주게되는데,
이 데이터는 컨트롤러에서 @RequestBody List<String> list <-- 이것으로 받아주게 되는것이다 ★★중요
이때 ajax에서 데이터를 한글로 받아오기 때문에 한글이 깨지지 않게하기 위해
produces = "application/text; charset=utf8"을 추가해주면 한글이 깨지지 않게 된당~~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @RequestMapping(value="/wishCnt", produces = "application/text; charset=utf8") @ResponseBody public String wishCnt(HttpSession session, @RequestBody List<String> list, Model model) throws JsonProcessingException { Map<String, Integer> addressMap = new HashMap<String, Integer>(); ObjectMapper mapper = new ObjectMapper(); String address = ""; int idx = 0; UserVO user = (UserVO) session.getAttribute("loginUser"); for(int i = 0; i< list.size(); i++) { address = list.get(i); idx = service.wishDivCnt(user.getUserId(), address); addressMap.put(address, idx); } String jsonWish = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(addressMap); return jsonWish; } | cs |
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(addressMap);
이것은 json데이터를 보기좋게 포맷팅해서 스트링으로 변환해주는 코드이다.
그리고 여기서 return되는 데이터를 @ResponsBody를 통해 ajax에서 받을 수 있는 것!
ajax부분을 다시 보게 되면, response로 controller에서 받아온 데이터를 처리해준다!
받아온 데이터를 다시 json형식으로 바꿔주고 $.each를 통해 key에 저장된 주소값과 div에 지정되어있는 주소값이 일치하면 span태그안에 즐겨찾기 수를 넣어주게 되는 코드이다!
누군가가 본다면 조금은 복잡한 코드라고 생각할 수 있겠지만 아직은 이정도가 나의 최대치정도,, 같다
나중에 더 열심히 공부를해서 코드를 보완하게 된다면 다시 수정하겠다! 아직은 이게 최선인것같음!!!
그리고 나는 더보기버튼을 이용해서 메인페이지에 6개씩 나타내어주고 더보기버튼을 누르면 6개씩 더 나타내어주고,
만약에 나타내어줄게 없다면 더보기버튼이 나타나지 않게 해주었다!
1 2 3 4 5 6 7 8 9 10 | $(function() { $(".wishDiv").slice(0, 6).show(); // 최초 6개 선택 $("#load").click(function(e) { // Load More를 위한 클릭 이벤트e e.preventDefault(); $(".wishDiv:hidden").slice(0, 6).show(); // 숨김 설정된 다음 6개를 선택하여 표시 if ($(".wishDiv:hidden").length == 0) { // 숨겨진 DIV가 있는지 체크 $('#load').css('display', 'none');// 더 이상 로드할 항목이 없는 경우 } }); }); | cs |
.wishDiv 의 default css는 display:none 으로 지정해두었다.
#load의 경우는 더보기 버튼의 id값!
더보기버튼은 위에 코드만 보면 간단하게 처리할 수 있으므로 더이상의 설명은 생략!
더 좋은 의견이나 수정할 부분, 오타가 있으면 댓글로 알려주세요~^_^
활용하시려면 댓글 부탁드립니당 ㅎㅎㅎ~!!
'개발공부' 카테고리의 다른 글
Jquery MonthPicker로 Jquery-ui 달력 월만 표시해주기 (JavaScript) (1) | 2019.05.03 |
---|---|
JavaScript) 1000단위마다 콤마를 찍어주는 함수 (0) | 2019.02.24 |
ajax를 통한 목록의 즐겨찾기 삭제 (0) | 2019.01.26 |
기상청 오픈API를 활용하여 전국 날씨 나타내주기(feat.JavaScript) (1) | 2019.01.26 |
카카오 다음 지도 API를 활용하여 다중마커찍기 (2) | 2018.12.06 |