시나리오 : form 페이지에서 submit될 때 비동기로 액션을 호출한다. 이때 사용자로부터 입력을 못받게 회색 레이어로 덮어준다. 액션에서는 json 객체를 반환한다.
1. 액션에서 익명객체 생성하여 Json으로 반환
public class AjaxTextController : Controller {
...
[HttpPost]
public ActionResult SubmitForm(FormCollection fc)
{
string p1 = fc["p1"] == null ? "" : fc["p1"].ToString();
string p2 = fc["p2"] == null ? "" : fc["p2"].ToString();
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000); // Loading창이 표시되는것을 눈으로 보기 위해 10초 정도 대기시간을 준다.
}
// 익명객체를 생성하여 단순히 전달받은 파라미터를 넣어준다.
var obj = new
{
p1 = p1,
p2 = p2
}
return Json(obj); // 익명객체를 Json으로 반환해준다.
}
}
2. 뷰페이지에서 아래와 같이 처리
<!-- jQuery 라이브러리 포함 -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
...
<!-- 폼 -->
<form id="myForm">
<input type="text" name="p1" placeholder="p1">
<input type="text" name="p2" placeholder="p2">
<input type="submit" value="Submit">
</form>
...
<!-- 로딩창 -->
<div id="loading-overlay" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); z-index:1000;">
<div style="position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); width:200px; height:100px; background:white; border-radius:10px; display:flex; align-items:center; justify-content:center;">
<span>Loading...</span>
</div>
</div>
<!-- 비동기호출부분 처리 -->
<script>
$(document).ready(function () {
$('#myForm').submit(function (event) {
event.preventDefault(); // 기본 submit 이벤트 방지
// 폼 데이터를 변수에 저장
var formData = $(this).serialize();
// 로딩 오버레이 표시
$('#loading-overlay').show();
// AJAX 요청
$.ajax({
type: 'POST',
url: '/AjaxTest/SubmitForm', // 서버의 폼 처리 URL
data: formData,
success: function (response) {
console.log('Response from server: ', response);
console.log('p1: ' + response.p1);
console.log('p2: ' + response.p2);
// 로딩 오버레이 숨기기
$('#loading-overlay').hide();
},
error: function (xhr, status, error) {
console.error('Error: ', error);
// 오류 응답 처리
// 로딩 오버레이 숨기기
$('#loading-overlay').hide();
}
});
});
});
</script>
3. 실행시 동작결과
폼에서 p1과 p2를 채운 후 submit버튼을 누르면 로딩창이 10초간 뜨다가 사라진다.
콘솔창에는 p1과 p2 값을 찍어준다.
'웹프로그래밍' 카테고리의 다른 글
input 태그에서 알파벳, 숫자, 언더바만 입력 받기 (0) | 2024.01.11 |
---|---|
첨부파일 용량제한 처리하기(html, javascript) (1) | 2024.01.04 |