본문 바로가기
오류

Uncaught RangeError: Maximum call stack size exceeded

by 신방동불주먹 2023. 2. 27.

원인 : Controller 에서 받는 argument는 vo객체인데 그냥 js객체로 전달.

 

	
			var param = {"empno":empno, "name":name, "birth_date":birthday}
			//form.submit();
			$.ajax({
				url:"findid",
				method:"POST",
				data:{"empno":empno, "name":name, "birth_date":birthday},
				success:function(data){
					console.log("data" + data);
					alert("성공");
				},
				error:function(){
					alert("에러입니다.");
				}

			
		});

 

Ajax의 data를 Controller에서 받아야할 때 Vo를 만들어서 받는 방법 :

parameter를 json형태로 만들어서 컨트롤러로 넘기는 작업

var param = {"empno":empno, "name":name, "birth_date":birthday}
			$.ajax({
				url:"findid",
				method:"POST",
				data: JSON.stringify(param),
				success:function(data){
					console.log("data" + data);
					alert("성공");
				},
				error:function(){
					alert("에러입니다.");
				}
		});

JSON.stringify(): JavaScript 객체를 JSON 문자열로 변환 : stringify() 메서드는 JavaScript 객체를 인자로 받고 JSON 문자열을 반환한다.

 

@RequestBody 어노테이션은 json형태를 java객체로 쓰겠다는 의미,  String 형태로 받게 된다. MemberVO는 empno,  name, birthday 가 들어있는 객체.

VO를 만들어쓸때는 어노테이션을 붙여 쓰면 된다.

	@RequestMapping(value = "findid", method = RequestMethod.POST)
	public String findidPOST(@RequestBody MemberVO vo, RedirectAttributes rttr) throws Exception {
		log.info("아이디 찾기 POST");
		String id = usersService.findid(vo);
		log.info("id : " + id);

		return id;
	}