ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ASP.NET web forms call ajax (나는 분명 잘 리턴했는데 data가 undefined가 뜬다...)
    Web Forms 2023. 11. 29. 09:32

    분명 내 목표는,,, Java와 .net을 다 하는 개쩌는 풀스택 개발자였는데,,,,,,

    왜때문에 .net이랑 web froms,,, 그리고 classic asp를 하게되었는지 모를 일,,,,,

    아무튼 web forms에서 ajax호출할 때,, 다른 api 말고 내가 같은 프로젝트에 만든 함수 호출 하는 법,, 정리

    왜냐고? 난 몰랐으니까,, 

     

     

    function example(id) {
        $.ajax({
            type: "post",
            url: "/Sample/List.aspx/example",
            data: JSON.stringify({ id: id }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                console.log(response);
    
                // "d" 속성이 있는지 확인
                if (response.d !== undefined) {
                    var data = JSON.parse(response.d);
                    
                    if (data.success !== undefined) {
                        // 성공적인 경우
                    } else {
                        // 실패한 경우
                        console.error(data.message);
                        alert(data.message);
                        // 실패한 경우에 대한 처리 수행
                    }
                } else {
                    console.error("Invalid response format. 'd' property is missing.");
                }
            },
            error: function (xhr, status, err) {
                console.log(xhr);
                console.log(status);
                console.log(err);
            }
        });
    }

     

    이건 프론트에서 호출하는 부분

     

    [WebMethod]
        public static string example(string id)
        {
            try
            {
            	// 로직구현
                
                return new JavaScriptSerializer().Serialize(new { success = true, message = "성공 메세지" });
    
            }
            catch (Exception exception)
            {
                return new JavaScriptSerializer().Serialize(new { success = false, message = exception.Message });
            }
        }

     

     

    이건 백엔드에서 받는 부분,,,

     

    일단 중요한거,, 백엔드에서 받는 함수는 무조건 static이어야 함,,,

    왜냐하면 WebMethod가 호출될 때 이건 클래스가 인스턴스화 되지 않고도 되어야 한다.. 

    뭔말이냐면 페이지가 새로 구현되지 않고도 결과를 던져줄 수 있어야 한다는 뜻

    그렇기 때문에 정적인 메소드로 선언해야 한다는 것 이다,,,

    이걸 몰라서 왜 안되냐고 404 왜 뜨냐고 한참 삽질함 ㅠㅠ 눈물나네요

     

    그리고 프론트에서 또 짜증났던게

     

    리턴된 데이터가 data 이렇게 오는게 아니라 data.d 이렇게 왔어

    왜냐고,, 대체 왜냐고!!!!!!!

    로그찍어서 보다가 또 화났음

     

    이건 왜그러냐면 ASP.NET Web Forms 에서는 JSON 응답을 보낼 때 'd' 라는 속성으로 응답을 감싸서 보낸다..

    ASP.NET의 웹 메서드나 웹 서비스 호출시 발생하는 특별한 규칙중 하나래.........

    보안이랑 호환때문이래 이걸 읽으니까 asp.net 할 때 비슷한 이유로 삽질했던게 생각나고 그걸 어딘가에 정리해뒀던것도 생각이 났는데 원노트라 지지난 회사 계정 날아가면서 다 날아갔을거라는것도 생각남

    앞으로는.. 회사 계정에 정리하지 말자.. 하는 마음으로 티스토리에 정리해둠

     

    ASP.NET은 초반에만 좀 하다가 맨날 MVC만 했어서 까먹었었어.. 왜냐면 MVC는 이 규칙 적용 안된데

     

    암튼 그러니까 asp.net으로 만든 api 호출했는데 data.a 라고 호출을 했는데 undefined가 뜬다?

    a는 분명 잘 생성했다?

    그러면 console.log 찍어봐라 d가 감싸고 있을수도 있다...

     

    가라 이제 끝났다 설명

     

     

     

Designed by Tistory.