ใ ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ ์น๊ฐ๋ฐ ์ข ํฉ โ1์ฃผ์ฐจโ ใ
[ jQuery ๊ฐ๋ ]
- ์ ์ด์ฟผ๋ฆฌ๋ HTML ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์กฐ์์ ๋จ์ํ ํ๋๋ก ์ค๊ณ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
- ์ ์ด์ฟผ๋ฆฌ๋ ์คํ ์์ค์ด๋ฉฐ ์ ์ด์ฟผ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํธํ์ฑ ๋ฌธ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์ง๊ด์ฑ ๋ฑ์ ๊ณ ๋ คํ์ฌ ๋ง๋ค์ด์ก์
- ์ ์ด์ฟผ๋ฆฌ๋ HTML DOM traversing ๊ณผ manipulation, ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ ๋๋ฉ์ด์ , Ajax์ ๊ฐ์ ์์ ์
์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
- ์ ์ด์ฟผ๋ฆฌ๋ ํ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ์กด์ฌํ๋ฉฐ ์ด๋ฅผ ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐํ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
[ jQuery ๊ธฐ๋ฅ ]
๐ DOM traversal & manipulation
- ์์) id๊ฐ "element"์ธ ์์์ display๋ฅผ ์จ๊ธฐ๋ ค ํ ๊ฒฝ์ฐ ์๋ ์ฝ๋ ์ฒ๋ผ ์ง๊ด์ฑ ์๊ณ ์งง์ ์ฝ๋๋ก ์์์ ์ํ ๋ฐ ์กฐ์ ๊ฐ๋ฅ
# JavaScript
document.getElementById("element").style.display = "none";
# jQuery
$('#element').hide();
๐ Event handling
- ํน์ ์์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ event handler ํจ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํจ
# jQuery event handler
$(element).on("click", function(e){...})
๐ Ajax Method
- jQuery์ Ajax ๋ฉ์๋๋ฅผ ํตํด ์๋ฒ์ ๋ฐ์ดํฐ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
$.ajax({
url: "/rest/1/pages/245", // ํด๋ผ์ด์ธํธ๊ฐ HTTP ์์ฒญ์ ๋ณด๋ผ ์๋ฒ์ URL ์ฃผ์
data: { name: "ํ๊ธธ๋" }, // HTTP ์์ฒญ๊ณผ ํจ๊ป ์๋ฒ๋ก ๋ณด๋ผ ๋ฐ์ดํฐ
method: "GET", // HTTP ์์ฒญ ๋ฉ์๋(GET, POST ๋ฑ)
dataType: "json" // ์๋ฒ์์ ๋ณด๋ด์ค ๋ฐ์ดํฐ์ ํ์
})
// HTTP ์์ฒญ์ด ์ฑ๊ณตํ๋ฉด ์์ฒญํ ๋ฐ์ดํฐ๊ฐ done() ๋ฉ์๋๋ก ์ ๋ฌ๋จ.
.done(function(json) {
$("<h1>").text(json.title).appendTo("body");
$("<div class=\"content\">").html(json.html).appendTo("body");
})
// HTTP ์์ฒญ์ด ์คํจํ๋ฉด ์ค๋ฅ์ ์ํ์ ๊ดํ ์ ๋ณด๊ฐ fail() ๋ฉ์๋๋ก ์ ๋ฌ๋จ.
.fail(function(xhr, status, errorThrown) {
$("#text").html("์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.<br>")
.append("์ค๋ฅ๋ช
: " + errorThrown + "<br>")
.append("์ํ: " + status);
})
//
.always(function(xhr, status) {
$("#text").html("์์ฒญ์ด ์๋ฃ๋์์ต๋๋ค!");
});
์ถ์ฒ: https://araikuma.tistory.com/640 [ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์ง์ ๊ณต์ :ํฐ์คํ ๋ฆฌ]
[ jQuery CDN ์ ์ฉ ]
๐ ์ ์ด์ฟผ๋ฆฌ ํ์ผ ๋ค์ด & ๋ก๋
- jQuery ๊ณต์ ํํ์ด์ง ์ฐธ์กฐ ๐ https://jquery.com/download/
- ์ ์ฅ๋ jsํ์ผ์ ์ฌ์ฉํ html ํ์ผ ๋ด ๋ก๋
<head>
<script src="/ํ์ผ๊ฒฝ๋ก/jqueryํ์ผ๋ช
.js"></script>
</head>
๐ ์ ์ด์ฟผ๋ฆฌ CDN ๋ก๋
- ๊ตฌ๊ธ CDN ์ฌ์ฉ ๐ https://developers.google.com/speed/libraries
- jQuery ๊ณต์ CDN ์ฌ์ฉ ๐ https://releases.jquery.com/
- jQuery CDN import
<head>
<!-- Google jQuery CDN import -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!-- jQuery CDN import -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
[ jQuery ์ฌ์ฉ ์ค์ต ์์ ]
๐ด๋ชฉํ : ํฌ์คํ ๋ฐ์ค ๋ฒํผ ํด๋ฆญ์ ํตํด ํฌ์คํ ๋ฐ์ค๋ฅผ ๋ณด์ด๊ฑฐ๋ ์จ๊ธฐ๊ธฐ
โ ํฌ์คํ ๋ฐ์ค ์์์ event handler์ธ onclick ์์ฑ์ ๋ถ์ฌํ๊ธฐ
<a id="btn-posting-box" class="btn btn-primary btn-lg" href="#" role="button"
onclick="#"
>ํฌ์คํ
๋ฐ์ค ์ด๊ธฐ</a
โก onclick ์ ๋ฐ์ํ ํจ์ ์์ฑ
<script>
function handlePosting(){
let status = $('.posting-box').css('display'); // ํ์ฌ ํฌ์คํ
๋ฐ์ค์ display ์์ฑ์ status์ ์ ์ฅ
if(status == 'block'){ // ํฌ์คํ
๋ฐ์ค์ display ์์ฑ์ด 'block'์ผ ๊ฒฝ์ฐ
$('.posting-box').hide(); // ํฌ์คํ
๋ฐ์ค ์์๋ฅผ ์จ๊น
$('#btn-posting-box').text('ํฌ์คํ
๋ฐ์ค ์ด๊ธฐ'); // ํฌ์คํ
๋ฐ์ค ๋ฒํผ ํ
์คํธ ๋ณ๊ฒฝ
}else{ // ํฌ์คํ
๋ฐ์ค์ display ์์ฑ์ด 'block'์ด ์๋ ๊ฒฝ์ฐ
$('.posting-box').show(); // ํฌ์คํ
๋ฐ์ค ์์๋ฅผ ๋ณด์ฌ์ค
$('#btn-posting-box').text('ํฌ์คํ
๋ฐ์ค ๋ซ๊ธฐ'); // ํฌ์คํ
๋ฐ์ค ๋ฒํผ ํ
์คํธ ๋ณ๊ฒฝ
}
}
</script>
โข ํฌ์คํ ๋ฐ์ค ์์์ onclick ์์ฑ์ ์์ฑ๊ฐ์ผ๋ก ํจ์ ์ ์ฉ
<a id="btn-posting-box" class="btn btn-primary btn-lg" href="#" role="button"
onclick="handlePosting()"
>ํฌ์คํ
๋ฐ์ค ์ด๊ธฐ</a
>
๐ฉ ๊ฒฐ๊ณผ
[ jQuery & ajax ์ฌ์ฉ ์ค์ต ์์ 1 ]
๐ด ๋ชฉํ : ์์ธ์ OpenAPI๋ฅผ ํตํด ์ค์๊ฐ ๋ฏธ์ธ๋จผ์ง ์ํ๋ฅผ ๋ถ๋ฌ์ jQuery๋ฅผ ํตํด ๋ณด์ฌ์ฃผ๊ธฐ
๐ ์ค๋น API : ์ค์๊ฐ ์์ธ์ ๋ฏธ์ธ๋จผ์ง ์ ๋ณด API
โ ์์ธ์ ๋ฏธ์ธ๋จผ์ง API์ JSON ํ์ธ
โก ajax์ get ๋ฉ์๋๋ฅผ ํตํด HTTP ์์ฒญ์ ์ ์กํ์ฌ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
$.ajax({
type: "GET", // get ๋ฉ์๋ ๋ฐฉ์์ผ๋ก HTTP ์์ฒญ
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
data: {},
success: function (response) { // ์๋ต ์ฑ๊ณต์ ์คํ
}
}
)
โข onclick ์ด๋ฒคํธ ๋ฐ์ ์ ๋ฐ์ํ ํจ์ ์์ฑ
<style>
/* ๋ฏธ์ธ๋จผ์ง ๋๋๊ฐ 70์ผ ๊ฒฝ์ฐ */
.bad{
color: red;
font-weight: bold;
}
</style>
<script>
function q1() {
$("#names-q1").empty(); // ์ด๋ฒคํธ ๋ฐ์์ ๊ธฐ์กด์ ์์ ์์๋ค ๋น์ฐ๊ธฐ
$.ajax({
type: "GET",
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
data: {},
success: function (response) {
let rows = response["RealtimeCityAir"]["row"]; // RealtimeCityAir -> row์ json์ rows ๋ณ์์ ์ ์ฅ
for (let i = 0; i < rows.length; i++) { // rows์ ๊ธธ์ด๋งํผ ๋ฐ๋ณต
let gu_name = rows[i]["MSRSTE_NM"]; // ํด๋น ๊ตฌ ์ด๋ฆ ์ ๋ณด ์ ์ฅ
let gu_mise = rows[i]["IDEX_MVL"]; // ํด๋น ๊ตฌ์ ๋ฏธ์ธ๋จผ์ง ๋๋ ์ ์ฅ
let temp_html = ``; // backtick ์ฝ๋๋ฅผ ์ ์ฅํ ๋ณ์
if (gu_mise > 70) { // ๋ฏธ์ธ๋จผ์ง ๋๋๊ฐ 70๋ณด๋ค ํด ๊ฒฝ์ฐ 'bad'๋ผ๋ ํด๋์ค ์์ฑ ์ถ๊ฐ
temp_html = `<li>${gu_name} : <span class="bad">${gu_mise}</span></li>`;
} else { // ๋ฏธ์ธ๋จผ์ง ๋๋๊ฐ 70๋ณด๋ค ์์ ๊ฒฝ์ฐ
temp_html = `<li>${gu_name} : <span>${gu_mise}</span></li>`;
}
// names-q1 ํด๋์ค๋ฅผ ๊ฐ์ง ์์์ temp_html ์ฝ์
$("#names-q1").append(temp_html);
}
},
});
}
</script>
โฃ ๋ฐ์ค ์์์ onclick ์์ฑ์ ์์ฑ๊ฐ์ผ๋ก ํจ์ ์ ์ฉ
<button onclick="q1()">์
๋ฐ์ดํธ</button>
<ul id="names-q1">
<li>์ค๊ตฌ : 82</li>
<li>์ข
๋ก๊ตฌ : 87</li>
<li>์ฉ์ฐ๊ตฌ : 84</li>
<li>์ํ๊ตฌ : 82</li>
</ul>
๐ฉ ๊ฒฐ๊ณผ
[ jQuery & ajax ์ฌ์ฉ ์ค์ต ์์ 2 ]
๐ด ๋ชฉํ : ๋๋ค ๊ฐ์์ง ์ฌ์ง API๋ฅผ ํตํด ๋ฒํผ ํด๋ฆญ์ ๋๋คํ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
๐ ์ค๋น API : ๊ฐ์์ง ์ด๋ฏธ์ง Open API
โ onclick ์ด๋ฒคํธ ๋ฐ์ ์ ๋ฐ์ํ ํจ์ ์์ฑ
<script>
function q1() {
$(".dog-info").empty();
$.ajax({
type: "GET",
url: "https://api.thedogapi.com/v1/images/search",
data: {},
success: function (response) {
let dog_url = response[0]["url"];
if (response[0]["breeds"] != "") {
let dog_name = response[0]["breeds"][0]["name"];
temp_html = `<span>dog name : ${dog_name}</span>`;
$(".dog-info").append(temp_html);
$("#img-dog").attr("src", dog_url);
} else {
$(".dog-info").append("<span>dog name : unknown</span>");
$("#img-dog").attr("src", dog_url);
}
},
});
}
</script>
๐ฉ ๊ฒฐ๊ณผ
[ 2์ฃผ์ฐจ ์์ : ์ผํ๋ชฐ ๋ฉ์ธ ํ์ด์ง ๊ตฌํ (2) ]
๐ด ๊ธฐํ์
๐ฉ ๊ฒฐ๊ณผ๋ฌผ
[ ๐ 2์ฃผ์ฐจ ์๊ฐ ]
2์ฃผ์ฐจ ๊ฐ์์์๋ jquery์ ajax์ ๊ธฐ๋ณธ๊ณผ get ํต์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ,
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ข ์ข ์ฌ์ฉํ์์ง๋ง jquery์ ajax์ ๊ฐ๋ ๋ ๋ชจ๋ฅด๋ฉด์
์ฌ์ฉํ๊ณ ์์๋ค๋ ์ฌ์ค์ด ์กฐ๊ธ ๋ถ๋๋ฝ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ํ๊ธฐ๊ฐ์ด๋ผ ๊ฐ์์ ๋ค์ ์ํํ๋ ๋ถ๋ถ์ด ์์ง๋ง ๋๊น์ง ์๊ฐ์ ์ํด์ ํงํ !