티스토리 뷰
문제: #search 버튼 클릭시 ajaxCallTest4.jsp url로 ajax를 호출하여연관검색단어를 조회하여 #str에 출력.
단, ajax에 배열 형태를 넘겨야 하기 때문에 {'키[]' : 배열객체} 형식으로 데이터를 전달해야한다.
◎ 04_ajaxTest4.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ajaxTest4.html</title>
<link rel="stylesheet" href="./css/search_words.css">
<script type="text/javascript" src="./js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="./js/search_words.js"></script>
</head>
<body>
<!--
문제4. #search 버튼 클릭시 ajaxCallTest4.jsp url로 ajax를 호출하여
연관검색단어를 조회하여 #str에 출력.
#str에 오는 배열값은 <option></option>로 감싸서 출력하면 된다.
1) 축구 연관단어 : 축구공, 축구장, 잔디
2) 수영 연관단어 : 수영장, 수영복, 물
3) 게임 연관단어 : 컴퓨터, 게임, 키보드, 마우스
4) ajax 배열 넘기는 방법
!! select의 multiple 속성으로 설정 할 경우,
값을 가지고 올때 배열로 인식
{'키[]' : 배열객체}
-->
<h2> 연관검색단어를 조회 </h2>
<div>
<h1>취미</h1>
<select id="types" multiple="multiple">
<option value="축구">축구</option>
<option value="수영">수영</option>
<option value="게임">게임</option>
</select>
</div>
<div>
<button type="button" id="search">연관단어검색 ▶</button>
</div>
<div>
<h1>연관단어</h1>
<select id="str" multiple="multiple"></select>
</div>
</body>
</html>
◎ search_words.js
/**
* search_words.js
*/
$(document).ready(function() {
$('#search').click(function() {
var input = $('#types').val();
var request = $.ajax({
url: "ajaxCallTest4.jsp",
method: "POST",
data: {
"types[]" : input
},
dataType: "json"
});
request.done(function(data){
$('#str').children().remove();
var array = data.result;
var strObj = $('#str');
strObj.html('');
if(array != undefined && array.length > 0) {
for(var i = 0; i < array.length; i++) {
strObj.append('<option value ="' + array[i] + '">' + array[i] + '</option>');
}
}
});
request.fail(function(jqXHR, textStatus){
alert("요청에 대한 응답이 실패했습니다. : " + textStatus);
});
});
});
◎ ajaxCallTest4.jsp
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.google.gson.Gson" %>
<%@ page import="java.util.*" %>
<%
response.setContentType("application/json");
response.setHeader("Content-Disposiont", "inline");
// 키값이 배열이기 때문에 받아 올때도 배열을 받아서 와야 한다.
// 배열을 받아올때는 getParameterValues를 이용해서 받아야한다.
String[] str = request.getParameterValues("types[]");
for(String s : str) {
System.out.println(s);
}
List<String> list = new ArrayList<String>();
for(int i = 0; i < str.length; i++) {
if(str[i].equals("축구")){
list.add("축구공");
list.add("축구장");
list.add("월드컵");
} else if(str[i].equals("커피")){
list.add("원두");
list.add("카페");
list.add("글라인더");
} else if(str[i].equals("계절")){
list.add("봄");
list.add("여름");
list.add("가을");
list.add("겨울");
}
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("result", list);
Gson g = new Gson();
out.println(g.toJson(map));
%>
반응형
'WEB > ajax' 카테고리의 다른 글
[ajax] ajax 기초 예제 <input에 따른 배열 생성> (0) | 2021.06.08 |
---|---|
[ajax] 비동기 요청 & 응답 기본 형식 정리 (0) | 2021.06.07 |
[ajax] ajax 기초 (0) | 2021.06.07 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- redux-thunk
- AsyncStorage
- react-native
- react
- 이탈리안 레스토랑
- await
- javascript
- 정보보안기사 #실기 #정리
- redux
- 인천 구월동 맛집
- 파니노구스토
- Async
- Promise
- 맛집
- 인천 구월동 이탈리안 맛집
- Total
- Today
- Yesterday