AJAX ๋ก ๋ณต์กํ ํํ ์ ์กํ๊ธฐ
AJAX๋ JSON ํํ๋ก ๊ฐ์ ์ ์กํ๋ค.
JSON ํํ๋ ๊ธฐ๋ณธ key : value ํํ๋ก ์ ์ก๋์ง๋ง Objcet ์๋ ๋ชจ๋ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ value์ ๋ฐฐ์ด, ๋ฐฐ์ด์์ ์ค๋ธ์ ํธ, ๊ทธ ์์ ๋ฐฐ์ด ๋ฑ๋ฑ.. ๊ต์ฅํ ๋ณต์กํ ํํ์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ด๋ ๊ฒ ๋ณต์กํ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์์ ๊ฒฝ์ฐ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์๋ ๋ณ๋์ ๋ฐฉ๋ฒ์ด ํ์ํ๋ฐ ์๋์ ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด๊ณ ์ ํ๋ค.
๋ณ๋๋ก ์์ฑ๋ html ๋ฌธ์๋ฅผ insert.jsp ์ ๋ณด์ฌ์ฃผ๋ ํํ๋ก ์งํ!!
jquery ๋ก ๋ค๋ฅธ ํ์ด์ง๋ฅผ ํด๋น ํ์ด์ง์ ๋ถ๋ฌ์ฌ ์ ์๋๋ฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
$('ํํํ ์์น').load(๋ถ๋ฌ์ฌํ์ด์ง๊ฒฝ๋ก ์
๋ ํฐ, [์ฝ๋ฐฑํจ์]);
โ views ํด๋์ ์๋ ๊ฒฝ์ฐ controller ์์๋ง ๋ถ๋ฌ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ static์ html ํด๋๋ฅผ ์ถ๊ฐํด html ๋ฌธ์๋ฅผ ์์ฑํด์ค๋ค.
์ด์ html ๋ฌธ์๋ฅผ ๋ณ๋๋ก ์์ฑํด๋ณด์
<div id="career_card">
<table>
<tr>
<th>์ด๋ฆ</th>
<td><input type="text" name="name" value=""/></td>
<th>์ฑ๋ณ</th>
<td>
<input type="radio" name="gender" value="๋จ"/>๋จ
<input type="radio" name="gender" value="์ฌ"/>์ฌ
</td>
<th rowspan="2">
<input type="button" class="row2" value="๋ฑ๋ก" onclick="regiest()"/>
</th>
</tr>
<tr>
<th>์๋
์์ผ</th>
<td><input type="date" name="birth_date" value=""/></td>
<th>์
์ฌ์ผ</th>
<td><input type="date" name="hire_date" value=""/></td>
</tr>
</table>
<div class="career">๊ฒฝ๋ ฅ ์ฌํญ</div>
<div>
<ul class="career">
<li>
<input type="text" name="co_name" placeholder="ํ์ฌ๋ช
"/>
<input type="date" name="start_date"/>
<input type="date" name="end_date"/>
<input type="text" name="desc" placeholder="์
๋ฌด๋ด์ฉ"/>
<button onclick="addList(this)">์ถ๊ฐ</button>
</li>
</ul>
</div>
</div>
์ html ๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด ๊ฐ์ธ์ ๊ธฐ๋ณธ์ ๋ณด์ ๊ทธ ์ฌ๋์ ์ปค๋ฆฌ์ด ์ ๋ณด๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก ์์ฑ๋์ด ์๋ค.
โ ๊ทธ๋ ๋ค๋ฉด ํด๋น ํ ์ดํฐ๋ค์ ๋ถ๋ฌ์ค๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผํ ๊น?
โ ์ถ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ฒฝ๋ ฅ ์ฌํญ์ ์ถ๊ฐ ์ ๋ ฅํ ์ ์๋๋ก ํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผํ ๊น? (๊ฒฝ๋ ฅ์ n๊ฐ๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์)
<script>
$('body').load('html/card.html #career_card', function(res,stat){
console.log(res);
console.log(stat);
});
function addList(elem){
var html = $(elem).parent().html(); // elem=this=button ์ ํ๋จ๊ณ ์์ ์๋ html์ ๊ฐ์ ธ์จ๋ค
console.log(html);
$('ul.career').append('<li>'+html+'</li>');
}
</script>
.load() ๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ํ์ด์ง์ ์๋ ๋ด์ฉ์ ๊ฐ์ ธ์จ๋ค.<li> ์์๋ค๋ง ์ถ๊ฐํด์ฃผ๊ธฐ ์ํด์ elem = button ์ ๋ถ๋ชจ์ธ li ์ html์ ๊ฐ์ ธ์ .append() ํด์ค๋ค.<li> ์ html ๋ด์ฉ๋ง ๊ฐ์ ธ์๊ธฐ ๋๋ฌธ์ ์ ๋ค์ <li></li>๋ฅผ ์ถ๊ฐ๋ก ๋ถ์ฌ์ append ํด์ค๋ค.์ด๋ ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋์ด์ ๊ฐ์ ธ์๋ค๋ฉด, ์ด์ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์กํด DB์ ์ ๋ ฅํด์ฃผ์ด์ผ ํ๋ค.

ํ์ฌ ๋ฑ๋ก ๋ฒํผ์ ํด๋ฆญํด onclick ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ regiest() ํจ์๊ฐ ์คํ๋๋ค.
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์๋ฒ์ ์ ์กํด์ค์ผ ํ๋๋ฐ ์ ์กํ ๋ฐ์ดํฐ๋
๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋์๋ ์กฐ๊ธ ๋ ์ ๊ฒฝ์จ์ค์ผ ํ๋ ๋ถ๋ถ๋ค์ด ์๋๋ฐ ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ํ๋์ฉ ์ดํด๋ณด์!
<script>
function resiest(){
// โผ ๊ธฐ๋ณธ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
var name = $('input[name=name]').val();
var gender = $('input[name=gender]:checked').val();
var birth_date = $('input[name=birth_date]').val();
var hire_date = $('input[name=hire_date]').val();
// โผ ๊ฒฝ๋ ฅ์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
var list = []; // ๋ฐฐ์ด ์์ฑ
// 2์ค for ๋ฌธ์ ์ฌ์ฉํด 0๋ฒ ์ธ๋ฑ์ค์ ํ๋์ ๊ฒฝ๋ ฅ์ด ๋ด๊ธฐ๋๋ก ์งํ
$('ul.career li').each(function(item, idx){
var career = {}; // Object ์์ฑ
$(item).find('input').each(function(elem, idx){
// input ์์์ name์ key๋ก value๋ฅผ ๊ฐ์ผ๋ก ๋ฃ๋๋ค (Object ํํ)
career[$(elem).attr('name')] = $(elem).val();
});
list.push(career);
});
// ์๋ฒ๋ก ์ ์กํ ํ๋ผ๋ฏธํฐ (Object)
var param = {};
param.name = name;
param.gender = gender;
param.birth_date = birth_date;
param.hire_date = hire_date;
param.list = list;
console.log('์๋ฒ์ ์ ์กํ ๋ฐ์ดํฐ : ' , param);
// AJAX
$.ajax({
type: 'POST',
url: 'insert.ajax',
data: JSON.stringify(param),
dataType: 'JSON',
contentType: 'application/json; charset=UTF-8',
success: function(data){
console.log(data);
},error: function(e){
console.log(e);
}
});
}
</script>
โ ๊ธฐ๋ณธ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
$)๋ก ์์๋ฅผ ๋ถ๋ฌ์ .val() ๋ก ์์์ value๋ฅผ ๋ด์์ค๋ค.โ ๊ฒฝ๋ ฅ์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
$)๋ก class๊ฐ career์ธ ul ํ๊ทธ์ ์์ ์์์ธ li ์์๋ฅผ ๊ฐ์ ธ์จ๋ค..push(career) ๋ก ๋ฐฐ์ด์ ์ค๋ธ์ ํธ๋ฅผ ๋ด์์ค๋ค.โ ์๋ฒ๋ก ์ ์กํ ํ๋ผ๋ฏธํฐ
param.name = name; : ์ค๋ธ์ ํธ.key = value;+๊ฐ ์๋ ,๋ก ํด์ค์ผ ํ๋ค!โ AJAX (๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ๊ท์น!!)
JSON.stringify() ๋ก ๋ฌธ์์ด๋ก ๋ณํํด์ค๋ค.JSON.parse()application/json;charset=UTF-8 ๊นจ์ง ๋ฐฉ์ง๋ฅผ ์ํด ๊ฐ์ด ์ฌ์ฉํด์ค์ผ ํ๋ค.@PostMapping(value="/insert.ajax")
@ResponseBody
public Map<String, Object> insert(@RequestBody Map<String, Object> param){
String name = (String) param.get("name");
String gender = (String) param.get("gender");
String birth_date = (String) param.get("birth_date");
String hire_date = (String) param.get("hire_date");
logger.info("name : {}, gender : {}, birth_date : {}, hire_date : {}", name,gender,birth_date,hire_date);
List<Map<String, String>> list = (List<Map<String, String>>) param.get("list");
// view์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๋์ง ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ
Map<String, Object> result = new HashMap<String, Object>();
result.put("success", true);
return result;
}
โ AJAX๋ก ์ ๋ฌํ ์ด๋ฆ๊ณผ ์๋ฒ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์ด๋ฆ์ ์ ํํ๊ฒ ๋์ผํด์ผ ํ๋ค!
โป logger ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋ค.
@RequestBody ๋ก ๋ฐ์์ค์ผ ํ๋ค.String ๋ก ๋ฐ์์ค๋ค.List์ Map ํํ๋ก ๋ฐ์์ค๋ค.