본문 바로가기
CLASS/AJAX

#4-2 / ECMA + Ajax (POST통신)

by hingu 2024. 7. 17.

post통신은 method을 post로 적용 및 headers에 application~으로 작성

(배열이 아닐 경우 ?를 이용하여 GET과 비슷한 형태로 전송)

가상의 변수를 이용하여 Backend가 받는 파라미터 이름을 이용하여 body 속성에 값을 적용하여 보내는 방식도 있음

단,배열값 전송시에 body : {} 필수임

 

⚡ 아이디 중복확인

- ecma_9.jsp

<body>
	<form id="frm">
		아이디 : <input type="text" name="mid" id="mid">
		<input type="button" value="중복체크" id="btn">
	</form>
</body>

<script type="module">
	import {logins} from "./ecma_9.js";
	document.querySelector("#btn").addEventListener("click",function(){
		if(frm.mid.value == ""){
			alert("아이디를 입력해주세요")
		}else{
			new logins().ajax_idck(frm.mid.value);	
		}
		
	});

</script>


- ecma_9.js

export class logins {
	ajax_idck(id){
		this.mid = id;
		fetch("./ecma9ok.do",{
			method : "POST",
			headers : {"content-type":"application/x-www-form-urlencoded"},
			body : this.mid
			//body : {"mid":id} //배열일때는 이렇게
		})
		.then(function(aa){	
			return aa.text(); //결과값
		}).then(function(bb){
			console.log(bb);
		}).catch(function(error){
			console.log("통신오류 발생!")
		});
	}	
}



fetch
ecma 부터 XMLHttpRequest => fetch로 변환함 (vue에도 있음)

첫번째 then
서버에서 응답받은 값을 처리하는 역할

두번째 then
서버에서 받은 값을 출력하는 역할

catch
예외처리 (오류발생시 출력)

에러남;; ㅋ /ecma/ 경로 다시 확인

 

👀 CORS 

@PostMapping("/ecma/ecma9ok.do")
public String ecma9ok(@RequestParam String mid, HttpServletResponse res) throws Exception{
    //CORS - 백엔드가 해줘야함
    res.addHeader("Access-Control-Allow-Origin", "*");
    res.addHeader("Access-Control-Allow-Credientials", "true");

    System.out.println(mid);
    this.pw = res.getWriter();
    this.pw.write("넹");

    return null;
}

=> 이건 ajax에서만 통함 , window에서는 X