개발 D/jsp

[jsp] Ajax 대기 시간, 타임아웃 등 통신설정 하는법

마음닝 2024. 2. 13. 15:12
Ajax의 통신 설정을 알아보자

 

 

 

Ajax 응답시간동안 button을 클릭하지 못하게 비활성화 해달라는 요구가 있어서 한번 알아보았다.

 

 

2가지 방법이 있다.

 

1. Ajax

$.ajax({
	url: '/button.do',
	type: 'post',
	contentType: 'application/json:chrset=utf-8',
	data: data,
   	async: false,
	success: function(resData) {
		alert('성공!');
	},
	beforeSend: function() {
		$("btn").prop("disabled",true);
	},
	complete: function() {
		alert('응답이 옴');
	},
	error: function(request, status, error) {
		alert('error');
	}
	,timeout: 5000
});​

 

 - async : 동기 / 비동기 설정

     true : 비동기 처리 (로직 처리를 기다리는것이 아니라 나머지 코드가 먼저 실행됨)

     false : 동기 처리 (로직 처리를 기다리고 그 후에 나머지 코드가 실행됨)

 - success : ajax 응답 성공시 처리되는 로직

 - beforeSend : ajax가 서버에 요청하기 전에 수행되는 로직

 - complete : 어떤 결과가 와도 실행되는 로직 ( finally와 유사 )

 - error : ajax 응답 error시 처리되는 로직

 - timeout : 설정된 시간내에 응답 없을시 error

 

 

2. Ajax promise 패턴

$.ajax({
    url: '/button.do',
    type: 'post',
    contentType: 'application/json:chrset=utf-8',
    data: data,		
}).done(function(data) {
    alert('성공');
}).fail(function(err) {
    alert(err);
}).always(function(){
    alert('Finally');
});

 

 - done : 성공했을 때 처리되는 로직

 - faile : 실패했을 때 처리되는 로직

 - always : 항상 처리되는 로직

 

이 두가지 방법을 합쳐서 요구사항을 처리할수 있게 되었다!

 

$.ajax({
    url: "/button.do",
    method: "post",
    enctype: 'application/json:chrset=utf-8',
    processData: false,
    contentType: false,
    dataType: "json",
    data: data,
    beforeSend: function(){
        $("btn").prop("disabled",true);				
    }			
}).done(function(data) {
    alert('성공');
}).fail(function(err) {
    alert(err);
}).always(function(){
    $("btn").prop("disabled",false);
});

 

Ajax가 서버에 요청하기 전에만 button을 비활성화 하고 always 버튼을 활성화 시켜

요청하기 전에만 비활성화 하게끔 설정 해두었다!

 

300x250