jquery ajax 비동기 페이지 이동 시 뒤로가기

2019.07.11 10:55language/jquery

ajax를 활용해서 비동기로 페이지 이동 시 뒤로가기를 구현해 보고자 한다.

 

먼저 비동기로 페이지 이동하는 방법에 대해서는 다음 링크를 참고한다.

 

ajax 화면 동적 전환

 

javascript history 추가

javascript 에서 history 를 추가하는 방법입니다. 앞서 history 삭제하는 방법은 링크를 참고하세요. history 삭제 javascript history 삭제 / href replace 비교 javascript history 삭제하기 는 불가능하다. 구..

cofs.tistory.com

 

위 포스팅에서 작성한 화면을 깜빡이지 않고 전환하는 방법에서 일부 소스를 추가했다.

 

html

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
<html>
    <body>
        <div id="gnb"></div>
            
        <div id="lnb"></div>
            
        <div id="bodyContents"></div>
        
        <input type="button" value="페이지 이동" onclick="acyncMovePage('/test/test.do')">
    </body>
</html>
 
<script>
 
    function acyncMovePage(url){
        // ajax option
        var ajaxOption = {
                url : url,
                async : true,
                type : "POST",
                dataType : "html",
                cache : false
        };
        
        $.ajax(ajaxOption).done(function(data){
            // url history 등록
            history.pushState(nullnull, url + "?" + params);
            
            // Contents 영역 삭제
            $('#bodyContents').children().remove();
            // Contents 영역 교체
            $('#bodyContents').html(data);
        });
    }
 
    $(window).on('popstate'function(event) {
        window.location = document.location.href;
    });
 
</script>
cs

27# : history.pushState() 함수를 활용해서 이동한 페이지 주소를 history 에 추가한다.

36# : window.popstate 이벤트가 발생할 때 페이지 전환을 한다.

 

 

history.pushState() 함수는 다음 포스팅을 참고한다.

javascript history 추가

 

javascript history 추가

javascript 에서 history 를 추가하는 방법입니다. 앞서 history 삭제하는 방법은 링크를 참고하세요. history 삭제 javascript history 삭제 / href replace 비교 javascript history 삭제하기 는 불가능하다. 구..

cofs.tistory.com

 

여기서 중요한 것은 window.popstate 이벤트 이다.

 

history.puthState() 함수나 history.replaceState() 함수에 의해서 history 엔트리가 생성(추가) 되면 popstate 이벤트의 state 속성은 history 엔트리의 state 객체의 복사본을 가지게 되는데 이 때 document의 두개의 history 엔트리에서 변화가 일어날 때 window.popstate 이벤트가 발생한다.

필자는 위 내용을 브라우저의 뒤로가기 버튼이나 history.back() 호출 시 이동할 history 가 history.puthState() 함수로 추가한 history일 경우에 window.popstate 이벤트가 발생한다고 이해했다.

 

popstate이벤트 내부에서 뒤로가기를 비동기로 구현할 수 도 있다.

필자는 이를 비동기로 구현했다가 스크립트 문제가 발생해서 사용하지 않았다.

 

끝 ~