- ex) sns앱의 경우
- 프로세스 : 앱 열기 / 페이지 내리기 / 포스트 로딩 / 댓글 업데이트 등
- 비동기 : 여러 프로세스들이 독립적으로 작동
- 동기 : 다른일이 끝날 때까지 대기함
➡️ vscode 이용 시
- front만 작성
- open window만 적용하였었음
- option + b
- Live Server 사용
- 설치 후 live server open
- 서버 포트 자동 오픈되면서 로컬 호스트 서버를 하나 받음
</section>
<script src="https://code.jquery.com/jquery-latest.js"></script>
<script src="js/main.js"></script>
if (elem.matches('[data-name="heartbeat"')) {
console.log('하트누름');
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: 'data/like.json',
data: 37,
dataType: 'json', //어떤 데이터로 들어오는지 설정
success: function (response) {//통신에 성공한 데이터가 response로 들어옴
let likeCount = document.querySelector('#like-count-37');
likeCount.innerHTML = '좋아요' + response.like_count + '개';
}
})
} else if (elem.matches('[data-name="bookmark"')) {
console.log('북마크누름');
} else if (elem.matches('[data-name="share"')) {
console.log('공유누름');
} if (elem.matches('[data-name="more"')) {
console.log('더보기누름');
}
elem.classList.toggle('on'); //on 클래스 주기
}
data: 37, let likeCount = document.querySelector('#like-count-37');
<div class="likes m_text">
<span id="like-count-37">1,203</span>
</div>
if (elem.matches('[data-name="heartbeat"')) {
console.log('하트누름');
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: 'data/like.json',
data: 37,
dataType: 'json', //어떤 데이터로 들어오는지 설정
success: function (response) {//통신에 성공한 데이터가 response로 들어옴
let likeCount = document.querySelector('#like-count-37');
likeCount.innerHTML = '좋아요' + response.like_count + '개';
},
error: function(request, status, error){
alert('로그인 필요');
window.location.replace('https://www.naver.com');//임시 에러 웹페이지
}
})
}
<div class="bottom_icons">
<div class="left_icons">
<div class="heart_btn">
<div class="sprite_heart_icon_outline" name ="37" data-name="heartbeat"></div>
<div class="sprite_bubble_icon"></div>
<div class="sprite_share_icon" data-name="share"></div>
</div>
</div>
<div class="right-icon">
<div class="sprite_bookmark_outline" name=""37" data-name="bookmark"></div>
</div>
</div>
<div class="likes m_text">
<span id="like-count-37">1,203</span>
<span id="bookmark-count-37"></span>
</div>
if (elem.matches('[data-name="heartbeat"')) {
//console.log('하트누름');
let pk = elem.getAttribute('name'); //pk값을 받아옴
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: 'data/like.json',
data: { pk },
dataType: 'json', //어떤 데이터로 들어오는지 설정
success: function (response) {//통신에 성공한 데이터가 response로 들어옴
let likeCount = document.querySelector('#like-count-37');
likeCount.innerHTML = '좋아요' + response.like_count + '개';
},
error: function (request, status, error) {
alert('로그인 필요');
window.location.replace('https://www.naver.com');//임시 에러 웹페이지
}
})
} else if (elem.matches('[data-name="bookmark"')) {
//console.log('북마크누름');
let pk = elem.getAttribute('name'); //pk값을 받아옴
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: 'data/bookmark.json',
data: { pk },
dataType: 'json', //어떤 데이터로 들어오는지 설정
success: function (response) {//통신에 성공한 데이터가 response로 들어옴
let likeCount = document.querySelector('#bookmark-count-37');
likeCount.innerHTML = '북마크' + response.bookmark_count + '개';
},
error: function (request, status, error) {
alert('로그인 필요');
window.location.replace('https://www.naver.com');//임시 에러 웹페이지
}
})
<div class="comment_field" id="add-comment-post37">
<input type="text" placeholder="댓글달기...">
<div class="upload_btn m_text" data-name="comment">게시</div>
</div>
<div class="comment_container">
...
<div class="comment" id="comment-list-ajax-post37">
<div class="nick_name m_text">JANG</div>
<div>nice</div>
</div>
.contents .comment_field .upload_btn{
color:#3897f0;
position: absolute;
right: 20px;
top: 50%;
transform:translateY(-50%);/*y축 중앙정렬*/
cursor: pointer;
/*pointer-events: none;/*클릭 금지*/
opacity: 0.6;
}
.contents .comment_container .comment{
display:flex;/*가로배치*/
flex-direction: column;
font-size: 14px;
}
.contents .comment_container .comment-detail{
display : flex;/*가로배치*/
}
else if (elem.matches('[data-name="comment"')) {
let content = document.querySelector('#add-comment-post37 > input[type=text]').value;
console.log(content);
if (content.length > 140) {
alert('댓글 최대 140자 입력 가능. 현재 글자수 : ' + content.length);
return;
}
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: './comment.html',
data: {
'pk': 37,
'content': content
},
dataType: 'html', //어떤 데이터로 들어오는지 설정
success: function (data) {
document.querySelector('#comment-list-ajax-post37').insertAdjacentHTML('afterbegin', data);
},
error: function (request, status, error) {
alert('에러 발생-comment');
}
})
} else if (elem.matches('[data-name="comment_delete"')) {
}
element.insertAdjacentHTML(position, text)
else if (elem.matches('[data-name="comment"')) {
let content = document.querySelector('#add-comment-post37 > input[type=text]').value;
console.log(content);
if (content.length > 140) {
alert('댓글 최대 140자 입력 가능. 현재 글자수 : ' + content.length);
return;
}
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: './comment.html',
data: {
'pk': 37,
'content': content
},
dataType: 'html', //어떤 데이터로 들어오는지 설정
success: function (data) {
document.querySelector('#comment-list-ajax-post37').insertAdjacentHTML('afterbegin', data);
},
error: function (request, status, error) {
alert('에러 발생-comment');
}
})
document.querySelector("#add-comment-post37 > input[type=text]").value = '';
} else if (elem.matches('[data-name="comment_delete"')) {
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: 'data/delete.json',
data: {
'pk': 37
},
dataType: 'json', //어떤 데이터로 들어오는지 설정
success: function (response) {
if (response.status) {
let comt = document.querySelector('.comment-detail');
comt.remove();
}
},
error: function (request, status, error) {
alert('에러 발생-comment delete');
window.location.replace('https://www.naver.com');
}
})
}
else if (elem.matches('[data-name="follow"')) {
$.ajax({
Method: 'POST', //에러 시 GET으로 변경
url: 'data/follow.json',
data: {
'pk': 37
},
dataType: 'json', //어떤 데이터로 들어오는지 설정
success: function (response) {
if (response.status) {
document.querySelector('input.follow').value = "팔로잉";
} else{
document.querySelector('input.follow').value = "팔로워";
}
},
error: function (request, status, error) {
alert('에러 발생-comment delete');
window.location.replace('https://www.naver.com');
}
})
}
<div class="sprite_more_icon" data-name="more">
<ul class="toggle_box">
<li>
<input type="submit" class="follow" value="팔로우" data-name="follow">
</li>
<li>수정</li>
<li>삭제</li>
</ul>
</div>
</header>
.contents .sprite_more_icon.on .toggle_box{
display: block;
}
.contents .toggle_box{
text-align: center;
position:absolute;
height: 0;
top:20px;
border : 1px solid rgba(0, 0, 0, 0.09);
border-radius:3px;
display:none;
}
.contents .toggle_box > li{
padding: 5px 10px;
background: #fff;
}
.contents .toggle_box > li input{
border : none;
font-size:inherit;
}
function scrollFunc() {
var scrollHeight = pageYOffset + window.innerHeight;
var documentHeight = document.body.scrollHeight;
// console.log(pageYOffset);
if (pageYOffset >= 10) {
header.classList.add('on');
if (sidebox) {
sidebox.classList.add('on');
}
resizeFunc();
} else {
header.classList.remove('on');
if (sidebox) {
sidebox.classList.remove('on');
sidebox.removeAttribute('style');
}
}
console.log('scrollHeight : ' + scrollHeight);
console.log('documentHeight : ' + documentHeight);
if (scrollHeight >= documentHeight) {
var page = document.querySelector('#page').value;
// page = parseInt(page) + 1;
// page = parseInt(page) + 1;
document.querySelector('#page').value = parseInt(page) + 1;
// $('#page').val(parseInt(page) + 1);
callMorePostAjax(page);
if (page > 10) {
return;
}
}
}
function callMorePostAjax(page) {
if (page > 10) {
return;
}
$.ajax({
type: 'GET',
url: "./post.html",
data: {
'page': page,
},
success: addMorePostAjax,
dataType: 'html',
error: function (request, status, error) {
alert('오류발생');
// alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
},
});
}
function addMorePostAjax(data) {
delegation.insertAdjacentHTML("beforeend", data);
}