좋아요(추천) 구현 모습
[원리의 이해]
- 게시물 상세페이지 진입 시 유저의 '좋아요' 여부가 확인되어야 함
- 화면에서 '좋아요' 부분만 업데이트 되어야 함으로 비동기식 ajax 사용
[View][HTML]
- 로그인 유저의 '좋아요' 여부에 따라 '빈 하트(heart.svg)' 또는 '검은 하트(heart-fill.svg)'가 출력되어야 하지만, 기본적으로는 '빈 하트'가 출력되도록 설정
- 게시글의 총 '좋아요' 개수 확인하여 출력
<div>
<label id="goodClick"><img id="heart" src="/resources/icon/heart.svg"></label>
<span id="totalGoodId">${totalGood}</span>
</div>
[View][Ajax]
[1] 좋아요(추천) 전체 개수 출력 함수
//좋아요 전체 개수 출력
function totalChange(){
$.ajax({
url :'${pageContext.request.contextPath}/totalGood',
type :'POST',
data : {'r_no' : ${SHgoodModel.r_no}},/* 게시글번호를 매개변수로.. */
success : function(data){
if(data !== null){
document.getElementById("totalGoodId").innerHTML = data;
/* 좋아요 총개수를 유저가 '좋아요' 클릭한 결과값으로 변경 */
} else {
alert("전체 개수 확인 실패");
}
}
});
}
[2] 좋아요(추천) 여부 확인 & 클릭 시 업데이트하는 함수
- window 진입 시 바로 좋아요 여부 확인하도록 함수 설정
(EL표현의 경우, Controller에서 DB에 접근하여 결과값을 가져올 수 있도록 미리 Model에 담아줌)
- 좋아요 클릭 시, 결과에 따라 하트 사진 변경하여 출력하도록 설정
$(function () {
// 추천 여부 확인
var userGood = ${userGood};
// userGood이 1이면 좋아요가 이미 되있는것이므로 heart-fill.svg를 출력하는 코드
if(userGood>0) {
$("#heart").attr("src", "/resources/icon/heart-fill.svg");
} else {
$("#heart").attr("src", "/resources/icon/heart.svg");
}
// 좋아요 버튼을 클릭 시 실행되는 코드
$("#goodClick").on("click", function () {
$.ajax({
url :'${pageContext.request.contextPath}/checkGood',
type :'POST',
data : {'r_no' : ${SHgoodModel.r_no}, 'id' : '${sessionScope.sessionId}'},
success : function(data){
if(data == 1){
/* alert("insert 성공"); */
$('#heart').prop("src","/resources/icon/heart-fill.svg");
totalChange(); /* 총 개수 출력 함수 호출하여 업데이트 */
} else if (data == 2){
/* alert("delete 성공"); */
$('#heart').prop("src","/resources/icon/heart.svg");
totalChange(); /* 총 개수 출력 함수 호출하여 업데이트 */
} else {
alert("실패");
}
}
});
});/* goodClick end */
});
'Project > 2022.02_게시판 만들기' 카테고리의 다른 글
[스프링] 프로젝트 - 게시판 댓글 구현(댓글 수정 편) (0) | 2022.02.19 |
---|---|
[스프링] 프로젝트 - 게시판 댓글 구현(댓글 삭제 편) (0) | 2022.02.19 |
프로젝트 환경안내 (0) | 2022.02.16 |
[스프링] 프로젝트 - 게시판 댓글 구현(댓글 리스트 출력 편) (0) | 2022.02.15 |
[스프링] 인터셉터(Interceptor)로 로그인 여부 확인해보자. (0) | 2022.02.07 |