Spring_비동기처리(아이디중복체크)

인삼주·2023년 8월 31일
0

spring

목록 보기
15/22
  1. Controller
	// 아이디 중복체크 (비동기방식 처리)
	// 페이지를 리턴하는 것이 아니라 데이터를 리턴하는 것이기 때문에 @ResponseBody를 써줘야한다.
	// return값이 페이지가 아니라 데이터리턴을 리턴하는거
	@ResponseBody	
	@RequestMapping(value="/idCheck.do", method = RequestMethod.POST)
	public ResponseEntity<ServiceResult> idCheck(@RequestBody Map<String, String> map){ //@RequestBody 비동기처리 시 사용, Map으로 받아야지 json형식대로 쓸 수 있다.(String으로 하면 그냥 한줄로 온다)
		/*
		 * 	단일 데이터를 꺼낼 때,
		 * 	1) ajax 설정에서 ContentType 설정을 하지 않고 데이터만 {memId : id} 설정해서 넘길 때
		 *  - String memId로 데이터를 꺼낼 수 있다.
		 *  
		 *  2) ajax 설정에서 ContentType 설정을 하지 않고, 데이터만 JSON.stringify일 때
		 *  - @RequestBody로 String memID를 꺼내면 '%7B%22memId%22%3A...' 이런 데이터가 넘어옴
		 *  
		 *  3) ajax 설정에서 ContentType 설정을 하고, 데이터만 JSON.stringify일 때 (데이터 JSON객체로 넘어감)
		 *  - @RequestParam으로 String memId를 꺼내면 400에러가 발생한다.
		 *  
		 *  4) ajax 설정에서 ContentType 설정을 하고, 데이터만 JSON.stringify일 때 (데이터 JSON객체로 넘어감)
		 *  - @RequestBody Map<String,String> map으로 꺼내면 'a001' 데이터가 넘어온다.
		 * 
		 */
		
		String id = map.get("memId").toString(); // map.get(key)를 넣어서 value를 꺼내쓴다.
		log.info("넘겨받은 아이디  : " + id);
		ServiceResult result = noticeService.idCheck(id);
		return new ResponseEntity<ServiceResult>(result, HttpStatus.OK); // 데이터를 리턴
	}
  1. jsp
// 방법 2)
		// 보낼 data를 JSON.stringify()로 묶어서 json 객체로 데이터를 보내고
		// contentType : "application/json; charset=utf-8"
		// 위와 같은 설정으로 진행하면, request header 정보에
		// contentType은 json으로 넘어가고, payload는 json 객체 형식으로 데이터가 넘어감
		var data = {
			memId : id
		};
		
		$.ajax({
			type : "post",
			url : "/notice/idCheck.do",
// 			data : {memId : id}, 		//방법 1) contentType 설정 안함, data도 {id : 1} 과 같이 설정
			data : JSON.stringify(data),	// 방법2) 서버로 보내는 데이터(json으로 받을꺼면 json형태로 감싸줘야한다)
			contentType : "application/json; charset=utf-8", // 방법2) 어떤 타입으로 데이터를 보낼지 
			success: function(res){
				console.log("아이디 중복 확인 결과 : " + res);
				if(res == "NOTEXIST"){	// 아이디 사용가능
					alert("사용 가능한 아이디입니다!");
					idCheckFlag = true; // 가입하기 버튼을 클릭할 때 아이디 중복 체크를 했는지 여부를 알려주는 플레그
				}else{					// 아이디 사용 불가능
					alert("이미 사용 중인 아이디입니다!");
				} 				
			}
		});
  
  

0개의 댓글