JQUERY
jQuery는 자바스크립트 라이브러리로, “write less, do more”라는 모토로 2006년 미국의 SW 개발자 존 레식(John Resig)이 발표하였다.
과거 웹 브라우저(크롬,익스플로러,사파리,파이어폭스) 간의 호환성이 좋지 않았던 시절 모든 웹 브라우저에 호환되며 짧은 코드로 다양한 기능을 다룰 수 있는 jQuery는 매우 인기 있었다.
특히 DOM을 쉽게 다룰 수 있다는 점과 jQuery를 기반으로 한 다양한 라이브러리를 사용할 수 있다는 점이 큰 장점
DOM(Document Object Model) - 웹 페이지를 이루는 태그들을 자바스크립트가 이용할 수 있게끔 브라우저가 트리구조로 만든 객체 모델
$()의 의미와 활용
- $ : 제이쿼리를 의미하면서 제이쿼리에 접근할 수 있는 식별자
- 괄호안에 "선택자"를 이용하여 원하는 HTML 요소를 선택하고 동작 함수를 정의하여 선택된 요소에 원하는 동작을 설정합니다.
. : class
# : id
> : 자식 엘리먼트를 가리키는 것
<script>
$(document).ready(function () {
$('.gnb > li').click(function(){
$(this).find('.lnb').stop().slideToggle(300);
})
});
function hadnleClick(target) {
$(target).find(".lnb").stop().slideToggle(300);
}
</script>
<style>
li {
list-style: none;
cursor: pointer;
width: fit-content;
}
.lnb {
list-style: none;
display: none;
}
</style>
<ul class="gnb">
<li onclick="hadnleClick(this)">
주제1
<ul class="lnb">
<li>가</li>
<li>나</li>
<li>다</li>
</ul>
</li>
<li onclick="hadnleClick(this)">
주제2
<ul class="lnb">
<li>가</li>
<li>나</li>
<li>다</li>
</ul>
</li>
<li onclick="hadnleClick(this)">
주제3
<ul class="lnb">
<li>가</li>
<li>나</li>
<li>다</li>
</ul>
</li>
</ul>
jqeury를 사용하지 않는 이유
jQuery가 현재 사용되지 않는 주요한 이유는 다음과 같다.
- 사용할 이유가 딱히 없다. 이제 과거와 달리 크로스 브라우징 이슈도 적어졌고, virtual DOM의 인기로 DOM을 직접 조작할 필요가 없어졌다. 또한, jQuery로 할 수 있는 대부분 기능은 바닐라 JS나 TypeScript 등으로 똑같이 구현할 수 있다.
- 무겁다. jQuery는 기존 코드를 래핑(wrapping)해서 새롭게 만든 패키지이다. 문제는 이러한 래핑이 지나치게 많고, 애초에 최적화를 위해 설계되지도 않았다는 점이다.
javascript | jquery |
document.getElementById(“some-id”) | $(“#some-id”) |
jquery 쪽이 훨씬 보기 편하다.
그런데 너무 쉽다보니 $를 남발하게 되기 때문에 생각보다 $를 쓰는게 메모리와 CPU를 잡아 먹는다.
AJAX
- Ajax는 Asynchronous Javascript and Xml의 약자
- 이는 자바스크립트의 라이브러리 중 하나이며, 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고 페이지의 일부만을 로드하는 기법. (비동기처리)
- JSON이나 XML형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있다.
- 클라이언트와 서버간에 XML 데이터를 주고받는 기술
동기 & 비동기
비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러온다.
- Javascript 함수가 웹 서버에 i번 페이지의 데이터를 달라고 HTTP 요청을 보낸다.
- 웹 서버는 i번 페이지의 데이터를 JSON등의 형식으로 응답한다.
- Javascript에서 해당 JSON 내용을 분석해, HTML의 일부분을 만든다.
- Javascript에서 만든 HTML의 일부분을 현재 페이지의 내용과 바꾼다.
이러한 비동기 방식은 시간도 빠르고, 화면을 리로드하는 경우 전체 리소스를 다 가져올 필요없이 일부 필요한 부분만 가져오기 때문에 장점을 가짐.
AJAX의 통신 방식
- 사용자가 이벤트를 발생시킨다
- 자바스크립트는 DOM을 사용해 필요한 정보를 구한뒤 XMLHttpRequest객체를 통해 웹서버 요청을 전달한다
- 웹 서버는 XMLHttprequest로 부터 요청을 처리한 후 결과를 XML이나 plain-text로 생성해 XMLHttpRequest에 전송한다
- 서버에서 응답이 도착하면 XMLHttpRequest객체는 자바 스크립트에 도착사실을 알리고 자바스크립트는 응답데이터와 DOM을 이용해 사용자 화면에 반영한다
$.ajax ({
// URL은 필수 요소이므로 반드시 구현해야 하는 Property입니다.
url : "url", // 요청이 전송될 URL 주소
type : "GET", // http 요청 방식 (default: ‘GET’)
async : true, // 요청 시 동기화 여부. 기본은 비동기(asynchronous) 요청 (default: true)
cache : true, // 캐시 여부
timeout : 3000, // 요청 제한 시간 안에 완료되지 않으면 요청을 취소하거나 error 콜백을 호출.(단위: ms)
data : {key : value}, // 요청 시 포함되어질 데이터
processData : true, // 데이터를 컨텐트 타입에 맞게 변환 여부
contentType : "application/json", // 요청 컨텐트 타입
dataType : "json", // 응답 데이터 형식 (명시하지 않을 경우 자동으로 추측)
beforeSend : function () {
// XHR Header를 포함해서 HTTP Request를 하기전에 호출됩니다.
},
success : function(data, status, xhr) {
// 정상적으로 응답 받았을 경우에는 success 콜백이 호출되게 됩니다.
// 이 콜백 함수의 파라미터에서는 응답 바디, 응답 코드 그리고 XHR 헤더를 확인할 수 있습니다.
},
error : function(xhr, status, error) {
// 응답을 받지 못하였다거나 정상적인 응답이지만 데이터 형식을 확인할 수 없기 때문에
// error 콜백이 호출될 수 있습니다.
// 예를 들어, dataType을 지정해서 응답 받을 데이터 형식을 지정하였지만,
// 서버에서는 다른 데이터형식으로 응답하면 error 콜백이 호출되게 됩니다.
},
complete : function(xhr, status) {
// success와 error 콜백이 호출된 후에 반드시 호출됩니다.
// try - catch - finally의 finally 구문과 동일합니다.
}
});
$.ajax({
type: "POST",
url: "/user/signup",
data: {user_id: username, user_pwd: password, user_nick: nick},
success: function (res) {
console.log(res);
if (res.result == "FAIL") {
let error_message = (document.getElementById("signup_error").innerText = `이미 존재하는 아이디입니다.`);
console.log(error_message);
}
else {
alert("회원가입이 완료되었습니다.");
window.location.href = "/";
}
},
});
출처 - AJAX란-무엇인가 , AJAX의-모든-것
'TIL & WIL' 카테고리의 다른 글
회원가입 - 버튼 클릭 중복 제거 (0) | 2022.10.26 |
---|---|
회원가입 - 유효성검사 & 암호화 (0) | 2022.10.25 |
웹 개발 종합 - 버킷리스트 만들기, 서버(AWS)에 올리기 (2) | 2022.10.21 |
웹 개발 종합 - Flask, GET, POST(서버로 데이터 통신) (0) | 2022.10.19 |
웹개발 종합 - PYTHON, PYMONGO (0) | 2022.10.17 |