[Jquery] ajax에서 동기화 작업하는 방법


안녕하세요. 명월입니다.


이 글은 ajax에서 동기화 작업하는 방법에 대한 글입니다.


예전에 ajax에 대해 소개한 적이 있습니다.

링크 - [Jquery] Ajax 예제


ajax는 기본적으로 비동기 처리의 함수입니다. 비동기라는 뜻은 처리의 결과를 기다리지 않고 병렬적인 처리라는 뜻입니다.

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>test</title>
  </head>
  <body>
    <div id="console"></div>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
      $(function(){
        // ajax 함수
        $.ajax({
          type:"GET",
          url:"./rss",
          dataType : "xml",
          success:function(msg){
            // div에 Debug -1를 출력합니다.
            var html = $("#console").html() + "<br />";
            html += "Debug -1";
            $("#console").html(html);
          }
        });
        // div에 Debug -2를 출력합니다.
        var html = $("#console").html() + "<br />";
        html += "Debug -2";
        $("#console").html(html);
      });
    </script>
  </body>
</html>

위 소스의 결과를 보면 Debug -2가 먼저 출력이 되고 Debug -1이 다음에 출력이 됩니다. 이게 비동기 식으로 되어 있어서 ajax를 호출하고 그 다음에 ajax의 결과를 기다리지 않고 스탭으로 넘어갑니다.

그러나 상황에 따라서 ajax를 사용하고 싶은데 Debug -1의 결과를 받고 그 결과에 따라서 다음 스탭처리를 하고 싶을 때도 있습니다. 그 방법은 위 ajax 값에 asyn: false만 넣으면 가능합니다.

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>test</title>
  </head>
  <body>
    <div id="console"></div>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
      $(function(){
        // ajax 함수
        $.ajax({
          type:"GET",
          url:"./rss",
          dataType : "xml",
          // 이 파라미터를 넣으면 비동기에서 동기화로 바뀝니다.
          async:false,
          success:function(msg){
            // div에 Debug -1를 출력합니다.
            var html = $("#console").html() + "<br />";
            html += "Debug -1";
            $("#console").html(html);
          }
        });
        // div에 Debug -2를 출력합니다.
        var html = $("#console").html() + "<br />";
        html += "Debug -2";
        $("#console").html(html);
      });
    </script>
  </body>
</html>

위 결과를 보면 ajax의 결과를 기다리고 Debug -2로 넘어가는 것을 확인 할 수 있습니다.

사실 ajax의 함수에서 의외로 제대로 된 기능을 알고 사용하는 사람이 많지 않습니다. 하긴 저도 그렇습니다. 정말 자주 사용하는 함수인데 사용하는 것만 사용하다 보니 알아도 까먹는 경우가 많네요..


ajax에서 꼭 json만 다루는 것이 아닌 xml를 다루는 부분도 그렇습니다. xml이 파싱되는 것을 예전에 작성했었는데, 까먹고 있었네요.

링크 - [Jquery] Ajax xml 파싱


이런 많은 기능을 잘 인지하고 있다가 프로그램을 작성할 때 다양하게 사용해야 겠습니다.


여기까지 ajax에서 동기화 작업하는 방법에 대한 소개였습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.