[JavaScript] AJAX(Asynchronous Javascript and XML)
포스트
취소

[JavaScript] AJAX(Asynchronous Javascript and XML)

AJAX


AJAX는 웹페이지의 이동없이 필요한 데이터만 전송하는 기술이다. 일반적인 경우 데이터 처리는 요청 순서대로 진행하지만 AJAX는 그렇지 않다.
AJAX는 비동기 통신 방식을 사용한다
비동기 통신의 방법
1.XMLHttpRequest객체 2.fetch API (ES06) 3.Axios 라이브러리 4.제이쿼리(Jquery)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

    <script>

        /*
        fetch("hi.txt").then(function(response){
            response.text().then(function(text){
                alert(text)
            })
        })
        */

        /*
        var promise = fetch("hi.txt").then(function(response){   // 성공했을때 받고싶은 함수
            console.log(1)
            response.text().then(function(data){
            console.log(data)
           })
            //console.log(response)                                // status:200 정상적으로 실행됐을때 
        })

        console.log(2)
        //console.log(promise)
        */

        /*
        fetch("hi.json").then(function(response){
            
            //console.log(response.json())
            response.json().then(function(data){
                console.log(data)
            })
        })
        */


        fetch("hi.json").then(function(response){           //hi.json 파일을 불러온다
                                                            //불러오는 것을 성공하면 callback 함수 실행 
            return response.json()                          //response안의 json함수를 통해 hi.json 정보 얻기
        }).then(function(data){                             //json 형태의 data {"id":"chew123"}에서 id의 value값만 뽑아내기
            return data.id                                  //id value값만을 리턴하여 콘솔에 출력 
        }).then(function(data){                             //결과= chew123
            console.log(data)
        })

    </script>
</body>
</html>

AJAX 외부데이터 받아오기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        function ajax(){

            fetch("https://yts.mx/api/v2/list_movies.json?sort_by=year&order_by=desc").then(function(response){
                //https://yts.mx/api/v2/list_movies.json 에서 json 데이터 받아오기
                if(response.status != 200){
                    alert("서버와 통신에 실패했습니다.")
                }else{
                    return response.json();
                    //response에성공했을때 json불러오기
                }
            }).then(function(data){
                //data값에 json 데이터 저장
                var moviesData = data.data.movies;
                //data이름으로 받아온 json 데이터 값의 data 내의 movies값 불러오기

                for(var i=0; i<moviesData.length; i++){
                    //console.log(moviesData[i]);
                //반복문 돌려서 json 데이터 값을 모두 불러오기
                
                    var title = moviesData[i].title;
                    var year = moviesData[i].year;
                    var img = moviesData[i].medium_cover_image;
                    var summary = moviesData[i].summary;
                    var genres = moviesData[i].genres;

                    console.log(title,year,img,summary,genres);
                }
            })
        }


        (function(){
            ajax();
        })();

    </script>
</body>
</html>

AJAX 외부데이터 화면에 처리하기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {margin: 0; padding:0;}
        ul, li {list-style:none;}
        .mainTitle {text-align: center;}
        .movieList {overflow: hidden; width: 80%; margin: 0 auto;}
        .movieList .movie {float:left; width:33.33333%; height: 300px; position: relative;}
        .movie img {width: 100px; position: absolute; top:0; left:0;}
        .inner {padding-left: 100px;}
        .inner .genres li {display: inline-block;}
        .inner .summary {overflow:scroll; height: 100px;}
    </style>
</head>
<body>
    <div class="mainTitle">
        <h3>영화 리스트</h3>
    </div>
    <div class="movieList">
        <!--
        <div class="movie">
            <img src="##" />
            <div class="inner">
                <h3 class="title">제목</h3>
                <h3 class="year">개봉일</h3>
                <ul class="genres">
                    <li>list1</li>
                    <li>list2</li>
                </ul>
                <p class="summary">내용</p>
            </div>
        </div>
        -->
    </div>



    <script>

        function ajax(){

            fetch("https://yts.mx/api/v2/list_movies.json?sort_by=year&order_by=desc").then(function(response){
                //https://yts.mx/api/v2/list_movies.json 에서 json 데이터 받아오기
                if(response.status != 200){
                    alert("서버와 통신에 실패했습니다.")
                }else{
                    return response.json();
                    //response에성공했을때 json불러오기
                }
            }).then(function(data){
                //data값에 json 데이터 저장
                var moviesData = data.data.movies;
                //data이름으로 받아온 json 데이터 값의 data 내의 movies값 불러오기
                var movieList = document.querySelector(".movieList")
                var tag = ""; //html 태그를 저장 할 변수

                for(var i=0; i<moviesData.length; i++){
                    //console.log(moviesData[i]);
                //반복문 돌려서 json 데이터 값을 모두 불러오기

                    var title = moviesData[i].title;
                    var year = moviesData[i].year;
                    var img = moviesData[i].medium_cover_image;
                    var summary = moviesData[i].summary;
                    var genres = moviesData[i].genres;

                    console.log(title,year,img,summary,genres);
                    //tag안에 html 태그를 넣는 방식으로 html 조립
                    tag += '<div class="movie">';
                    tag += '<img src="'+ img +'" />';  
                    tag += '<div class="inner">';   
                    tag += '<h3 class="title">'+ title +'</h3>';       
                    tag += '<h3 class="year">'+year+'</h3>';       
                    tag += '<ul class="genres">';
                            for(var k in genres){
                                tag += '<li>'+genres[k]+'</li>';
                            }              
                    tag += '</ul>'       
                    tag += '<p class="summary">'+summary+'</p>'       
                    tag += '</div>'   
                    tag += '</div>' 
                }
                movieList.innerHTML = tag;
                // innerHTML을 통해 tag를 넣어 html 화면에서 처리하기
            })
        }


        (function(){
            ajax();
        })();

    </script>
</body>
</html>
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.