본문 바로가기

공부

jQuery ajax

jQuery ajax

Ajax

  • Asynchronous Java Script and XML
  • JavaScript 와 XML을 이용한 비동기적 정보 교환 기법

 

jQuery

  • HTML 속 클라이언트 사이드 스크립트 언어를 단순화 하도록 설계된 브라우저 호환성이 있는 javaScript 라이브러리
  • .은 클래스, #은 아이디

 

Using the Core $.ajax Method

$.ajax({
	// the URL for the request
	url : 'post.php',

	// the data to send
	// (will be converted to a query string)
    // 서버에 전송할 데이터
	data : { id : 123 },

	// whether this is a POST or GET request
	type : 'GET',

	// the type of data we expect back
    // 서버로 부터 수신할 데이터 타입
	dataType : 'json',
    
    // ajax default content-type
    contentType : 'application/x-www-form-urlencoded',

	// code to run if the request succeeds;
	// the response is passed to the function
	success : function(json) {
		$('<h1/>').text(json.title).appendTo('body');
		$('<div class="content"/>')
			.html(json.html).appendTo('body');
	},

	// code to run if the request fails;
	// the raw request and status codes are
	// passed to the function
	error : function(xhr, status) {
		alert('Sorry, there was a problem!');
	},

	// code to run regardless of success or failure
	complete : function(xhr, status) {
		alert('The request is complete!');
	}
});

 

서버에서 어떤 contentType을 사용하는지

// server contentType: json
$.ajax({
    type : 'post',
    url : url,
    data : JSON.stringify(json),
    contentType: 'application/json',
    error : function() {},
    success : function() {}
});

// server contentType: x-www-form-urlencoded
$.ajax({
	type : 'post',
	url : url,
	data : queryString,
	error : function() {},
	success : function() {}
});



 

RequestBody 사용시

  • 데이터를 JSON 타입으로 받아옴.

@RestController
@RequestMapping("/api/users")
public class ApiUserController {

    @PostMapping("/login")
    public ResponseEntity<Void> login(HttpSession session, @Valid @RequestBody UserDto userDto) throws UnAuthenticationException {
    
        User user = userService.login(userDto.getUserId(), userDto.getPassword());
        session.setAttribute(HttpSessionUtils.USER_SESSION_KEY, user);

        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(URI.create("/"));
        return new ResponseEntity<Void>(headers, HttpStatus.OK);
    }
}
$("#login button[type=submit]").click(login);

function login(e) {
    e.preventDefault();

    var url = $('#login').attr("action");
    
    var json = new Object();
    json.userId = $('#userId').val();
    json.password = $('#password').val();

    $.ajax({
        type : 'post',
        url : url,
        data : JSON.stringify(json),
        contentType: 'application/json',
        error : function(xhr, status, error) {
            alert("아이디 또는 비밀번호가 다릅니다.")
        },
        success : function() {
            console.log("success");
            location.href = "/";
        }
    });
}

 

 

RequestBody 미사용

@RestController
@RequestMapping("/api/users")
public class ApiUserController {

    @PostMapping("/login")
    public ResponseEntity<Void> login(HttpSession session, UserDto userDto) throws UnAuthenticationException {
        log.debug("=#= login {}", userDto);
        User user = userService.login(userDto.getUserId(), userDto.getPassword());
        session.setAttribute(HttpSessionUtils.USER_SESSION_KEY, user);

        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(URI.create("/"));
        return new ResponseEntity<Void>(headers, HttpStatus.OK);
    }
}

 

 

$("#login button[type=submit]").click(login);


function login(e) {
    console.log("click login");
    e.preventDefault();

    var queryString = $("#login").serialize();
    console.log(queryString);

    var url = $('#login').attr("action");
    console.log(url);

    $.ajax({
        type : 'post',
        url : url,
        data : queryString,

        error : function(xhr, status, error) {
            alert("아이디 또는 비밀번호가 다릅니다.")
        },
        success : function() {
            console.log("success");
            location.href = "/";
        }
    });
}

 

 

참고

https://namu.wiki/w/AJAX

https://namu.wiki/w/jQuery

https://www.webucator.com/tutorial/learn-jquery/ajax.cfm

https://hue9010.github.io/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C/jQuery%EC%97%90%EC%84%9C-ajax-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

http://fetobe.co.kr/http-protocol/

 

'공부' 카테고리의 다른 글

scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); 를 하는 이유 ..  (0) 2019.03.06
객체지향 생활 체조  (0) 2019.02.26
AssertJ, JUnitSoftAssertions  (0) 2019.01.18
접근 제어자  (0) 2019.01.17
다형성 Polymorphism  (0) 2019.01.16