날아라쩡글이의 블로그입니다.
openAPI jQurey의 ajax처리하기 본문
728x90
반응형
jQuery는 ajax을 처리하기 위한 다양한 메소드를 지원한다.
jQuery의 ajax처리를 위한 주요 메소드는 3가지로 존재한다.
- $.get(url, data,function(responseData){...}, responseDataType);
- *url: 요청URL
- data: 서버로 보내는 데이터, 보낼게 없으면 생략가능
{page:1, no:14} ->요청URL?page=1&no=14
"page=1&no=14" ->요청URL?page=1&no=14
위아래 둘중에 하나로 보내도 상관없다. 위처럼 보내도 아래처럼 변환되어 전송된다. - *function(responseData) {...} : 서버로부터 성공적인 응답이 왔을 때 jQuery가 실행하는 메소드다.
- responseDate에는 서버가 응답으로 보낸 데이터가 전달된다.
- jQuery는 responseData로 데이터를 전달할 때, 자바스크립트 객체/배열, XML DOM객체로 변환한 후 전달한다.
- responseDataType :서버로부터 응답으로 받을 것으로 예상되는 컨텐츠 타입을 지정한다.(생략가능하다.)
"text" - plain text
"json" - json 형식의 데이터 -> javascript 배열, 객체 변환 후 반환
"xml" - xml 형식의 데이터 -> XML Document객체로 변환 후 반환
"jsonp" - 다른 사이트의 서버로부터 데이터를 요청할 때 사용된다.
url과 function은 필수다 - 사용방법
- $('#btn-load-products').click(function(){
//id가 상품을 보여주는 버튼을 클릭하면 콜백함수를 호출한다.
var $tbody = $('#table-products tbody');
//id가 table-product안에 있는 tbody의 jQuery객체를 tbody에 미리정의해둔다.
$.get("/script2/product/list.hta",function(data){
//get방식으로 호출한다.(url, data, fuction(responseData)) -->data는 필요없어 생략가능하다.
$.each(data, function(index, product){
//반복해서 응답받은 데이터를 index마다 상품에 저장한다
//console.log(product, product.no, product.name, product.company, product.price, product.discountPrice);
//no: 300, name: 'apple watch', company: '애플', price: 600000, discountPrice: 550000, …} 300 'apple watch' '애플' 600000 550000
//product의 객체, no,name순으로 출력된다.
var row = "<tr>";
row += "<td>"+product.no+"</td>";
row += "<td>"+product.name+"</td>";
row += "<td>"+product.company+"</td>";
row += "<td>"+product.price.toLocaleString()+" 원</td>";
row += "<td><strong>"+product.discountPrice.toLocaleString()+"원</strong></td>";
row += "</tr>";
$tbody.append(row); //tbody막내자식으로 들어간다.
});
},"json");
//다른 사이트의 서버로부터 데이터를 json형식의 데이터로 받는다.
})
- $.ajax({
type: 'GET' or 'POST', //요청방식
url: '요청URL', //요청URL
data: {no:14, page:1} or "no=14$page=1",
//서버로 보내는 데이터-->요청key
contentType: 'application/json' or 'text/xml',
//서버로 보내는 데이터의 컨텐츠타입, 기본값 "application/x-www-form-urlencoded"
dataType: 'text' or 'json' or 'xml' or 'jsonp',
//서버로부터 응답으로 받을 것으로 예상되는 컨텐츠 타입을 지정한다.
success: function(responseData) { //서버로부터 성공적인 응답이 왔을 때 실행되는 함수다.
},
error: function(){ //서버로 보낸 요청이 실패했을 때 실행되는 함수다.
}
})- 사용방법
- $("#btn-load-products").click(function(){
//서버랑 HTTP통신해서 데이터 받아와서 표현하기
//상품을 로딩하는 버튼을 클릭하면 콜백함수를 실행한다.
$.ajax({
//메소드 실행
type:'GET',
//type은 get방식으로
url:'/script2/product/list.hta',
//요청할 url
dataType:'json',
//데이터타입은 json으로 응답받을 것이다.
success:function(products) {
//요청응답이 성공적이면 함수를 실행한다.
var $tbody = $('#table-products tbody');
$.each(products,function(index, product){
//배열로 요청이 오기 때문에 each메소드를 사용해서 product에 넣는다.
var row = "<tr>";
row += "<td>"+product.no+"</td>";
row += "<td>"+product.name+"</td>";
row += "<td>"+product.company+"</td>";
row += "<td>"+product.price.toLocaleString()+" 원</td>";
row += "<td><strong>"+product.discountPrice.toLocaleString()+"원</strong></td>";
row += "</tr>";
$tbody.append(row);
//tbody자손으로 입력한다.
})
}
});//ajax에게 객체를 전달해주는 것이다. 필요한 부분만 작성하면 된다.
})
- getJSON(URL, data, function(data, status, hxr) { ... })
- 응답컨텐츠가 JSON일 때 사용한다.
- 사용방법
- $("#table-boxoffice tbody").on('click', '.btn', function() {
//미래에 생길 tbody에 클래스버튼이 생기고, 그 버튼을 클릭하면 콜백함수가 실행된다
//클래스버튼을 클릭하면 이벤트가 발생한다.
var movieCode = $(this).attr('date-movie-code');
//get방식이고 JSON으로 데이터가 올것이라고 생각하고 이렇게 작성하는 것임
//버튼을 실행시킨 객체의 data-movie-code의 속성은 변수 movieCode에 넣는다.
$.getJSON("https://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieInfo.json",
//url :영화진흥원
{key:"f5eef3421c602c6cb7ea224104795888", movieCd:movieCode },
//전송할 data moviecd는 다른곳에서 출력된 코드가 있었다.
function(result){
//결과를 함수의 매개변수 result에 넣고 실행한다.
var movie = result.movieInfoResult.movieInfo;
//movieInfoResult안에 movieInfo안에 있는 결과값이 필요해서 경로를 변수에 저장한다.
$("#movie-title").text(movie.movieNm);
//해당하는 장소에 텍스트로 변환하여 입력한다.
$("#movie-name").text(movie.movieNm);
$("#movie-name-en").text(movie.movieNmEn);
$("#movie-open-data").text(movie.openDt);
$("#movie-show-time").text(movie.showTm +" 분");
$("#movie-genre").text(movie.genres.map(item => item.genreNm).join(", "));
//map()함수는 자바스크립트의 기존의 형태를 다른 형태로 바꾼다.
//item=>item.genreNm은 function(item){return item.genreNm}이다. 이걸 화살표함수로 변경
//join은 배열을 구분자 ","을 사용해서 하나의 text로 합쳐주는 메소드이다
$("#movie-audits").text(movie.audits.map(item => item.watchGradeNm).join(","));
$("#movie-directors").text(movie.directors.map(item => item.peopleNm).join(","))
$("#movie-actors").text(movie.actors.map(item => item.peopleNm).filter((item, index) => index < 5).join(","));
//filter함수를 걸어서 5개까지만 출력되도록 화살표함수로 작성한다.
$("#movie-companys").text(movie.companys.map(item =>item.companyNm).filter((item,index)=>index < 1).join(","));
$("#movie-companys-staff").text(movie.companys.map(item =>item.companyNm).filter((item,index)=>index > 1).join(","))
//모달창을 표시한다.응답이 와야지 바로바로 창이 뜰 수 있다.
//앞에 있었던 데이터가 존재하다보니까 사용자에게
boxOfficeModal.show();
});
})
$each의 두가지 획득방법
- $("p").each(function(index, element))
- p의 엘리먼트를 전달한다.
- 선택자함수로 선택된 엘리먼트의 갯수만큼 each(함수)의 함수가 실행된다.
- element에는 선택된 엘리먼트가 순서대로 전달된다.
- function안에서 사용되는 this에는 선택된 엘리먼트가 function이 실행될때마다 전달된다.
- 엘리먼트의 반복이다.
- $.each(배열명,fuction(index, item))
- 배열안에 들어있는 item의 갯수만큼 전달된다.
- 배열에 저장된 값의 갯수만큼 each(배열, 함수)의 함수가 실행된다.
- item에는 배열에 저장된 값이 순서대로 전달된다.
- function안에서 사용되는this에는 배열에 저장된 값이 function이 실행될 때마다 전달된다.
- 배열의 function이다.
$("#btn-get-data").click(function(){
var total = 0;
$ajax({
succes:function(result){
$.each(result, function(index, item){
total += item.amount;
})//$(#data-total).text(total); 여기에 입력해야 제대로 된 값이나온다.
}
$(#data-total).text(total); //0이나온다.
})
})
- $.ajax()는 응답이와야 실행할 수 있다. 입력값이 나오도록 하려면 ajax안에 작성해야한다.
그래야 응답이 오면 실행해서 제대로된 total값이 나오기 때문이다.
반응형
'중앙 HTA (2106기) story > javascript story' 카테고리의 다른 글
vue.js설정 방법 (0) | 2022.01.12 |
---|---|
Vue.js 설명 (0) | 2022.01.12 |
jQuery DOM(부모,자식) (0) | 2021.12.23 |
JQueryDOM조작 (0) | 2021.12.22 |
jQuery 이벤트 (0) | 2021.12.21 |
Comments