본문 바로가기
개발공부/Spring

(Ajax) 객체 속 함수 호출하기

by mungyony 2020. 1. 9.

(그냥 넣어봄)

ajax를 쓸 때마다 공통되는 옵션 속성들이 있어서 ajax_set이라는 객체를 생성하고,

ajax실행용 함수를 따로 만들어서 그 함수를 실행시키는 방식으로 ajax를 사용하고 있었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var ajax_set = {
              url: "<c:url value='url예시'/>",
              param: "",
              return_fn:function(data){
                  if(data == 0){
                     // 정상 통신
                  }
                  else if(data == -1){
                     // 서버 내부 오류발생
                  }
              },
              return_error:function(){
                 // 서버통신 도중 오류발생
              }
          };
          doAJAX_WSC(ajax_set, true);
cs
 

위처럼 ajax_set 객체를 선언 후에 밑에 있는 doAJAX_WSC 함수를 호출.

 

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
function doAJAX_WSC(ajax_set, _async){ // 파라미터 _async: true이면 비동기, false이면 동기
  $.ajax({
      type: "POST",
      url: ajax_set.url,
      data: ajax_set.param,
      processData: false,
      dataType: 'json',
      async: _async,
      beforeSend: function(xmlHttpRequest){
        xmlHttpRequest.setRequestHeader("AJAX""true"); // 첫번째 인자("AJAX")헤더의 값를 두번째인자("true")로 셋팅해준다.
      },
      error: function(e){
          if(e.status == 401){ // 인터셉터에서 401을 발생시키고, 받아온다.
              RndAlert("warn""로그인 시간이 만료되었습니다."function(){'실행될 기능';});
              return;
          }
          else{
              ajax_set.return_error;
          }
      },
      success: function() {
         ajax_set.return_fn;
      }
//      success:ajax_set.return_fn
  });
}
 
cs

그런데 여기서 doAJAX_WSC함수의 success부분을 함수화 시켰더니

ajax_set.return_fn 부분이 무슨짓을 해도 안 되는 일이 발생했다.

주석 처리된 success:ajax_set.return_fn은 아주아주 잘 실행되면서..

 

한참을 헤매다가 찾아낸 결론이

success:ajax_set.return_fn 일 때는 

success에서 바로 ajax_set의 return_fn을 실행시켜, 응답받은 데이터까지 자동으로 바로 넘겨주는 거라 문제가 없었는데

 

success: function(){} 으로 썼을 때는 응답받은 데이터를 직접 넘겨줘야 했던 것이었다.

그러니까

      success: function() {

         ajax_set.return_fn;

      }

 

이게 아니라

      success: function(data) {

         ajax_set.return_fn(data);

      }

 

이런 식으로 직접 데이터를 넘겨줘야 했다..

 

 

근거 찾으면 추가로 올려야지

 

 

댓글