jQuery ajax 업로드를 반복문으로 돌릴 때 커서 변경과 관련해서 질문 드려요 채택완료
안녕하세요?
jQuery ajax 파일 업로드를 for 문으로 반복을 돌릴 때 커서 변경과 관련해서 질문 드려요 ^^
제가 사용하는 API에서 멀티파일 업로드를 지원하지 않아서
부득이 input 태그에서 받은 여러 개의 파일을 for문으로 반복하여 ajax 업로드를 처리하고 있는데요.
ajax가 시작하기 직전에 $("body").css("cursor", "progress");를 넣고
ajax의 success 또는 complete에 $("body").css("cursor", "default");을 넣으면
여러 개의 파일 중 한 개의 파일이 업로드되면 바로 커서가 원래대로 복구가 되는데요.
이것을 모든 파일이 업로드된 후에 비로소 커서가 원래대로 복구하도록 수정할 수 있을까요?
var fileInput = document.getElementById("file_input");
var files = fileInput.files;
$("body").css("cursor", "progress");
for (var i = 0; i < files.length; i++) {
var data = new FormData();
data.append('up_load', files[i]); // IE에서 set 메서드를 지원하지 않아서 이렇게 처리했습니다.
$.ajax({
url: '/bbs/upload_process.php',
method: 'post',
data: data,
async: true,
processData: false,
contentType: false,
success : function(datas) {
$("body").css("cursor", "default");
}
});
}
$.ajax를 사용해서 통신을 하면 $.ajax가 가장 마지막에 호출되어 동작하기 때문인지
$.ajax가 포함된 for문의 뒤에 $("body").css("cursor", "default");을 넣으면
커서가 progress로 아예 바뀌지 않는 것처럼 보이더군요 ㅠㅠ
덧붙여 여쭤보면 위 코드에서 for문 안의 1~2행인 아래와 같은 부분도
개발자분들께서 보시기에 자연스럽지 않은 코딩인 것 같다는 생각이 드는데요 ㅜㅜ
var data = new FormData();
data.append('up_load', files[i]); // IE에서 set 메서드를 지원하지 않아서 이렇게 처리했습니다.
원래는 data 변수의 선언은 for문 이전에 하고 data.set으로 처리하려고 했는데
IE에서는 set 메서드를 지원하지 않더군요.
(delete 메서드도 지원하지 않구요)
https://developer.mozilla.org/ko/docs/Web/API/FormData
제가 실력이 부족해서 코딩 컨벤션(?)과는 거리가 먼 엉뚱한 방식으로 처리를 한 것 같은데요.
SIR 회원님들께서는 이런 경우에 어떻게 처리하시는지 여쭤봅니다 ^-^
API 차원에서 지원하지 않는 멀티파일 업로드를 구현하려고 하다보니
저처럼 개발자도 아니고 IT 직역에도 종사하지 않는 초보자에게는 어렵네요 ㅠㅠ
그럼 날씨가 무더운데 SIR 회원님들께서도 항상 건강하시고
답변해주실 분들께 미리 감사드려요 :)
답변 1개
테스트는 안해봤지만....
이런식이면 되지 않을까요?
function aa(){
$("body").css("cursor", "progress");
bb();
}
function bb(){
var fileInput = document.getElementById("file_input");
var files = fileInput.files;
for (var i = 0; i < files.length; i++) {
var data = new FormData();
data.append('up_load', files[i]); // IE에서 set 메서드를 지원하지 않아서 이렇게 처리했습니다.
$.ajax({
url: '/bbs/upload_process.php',
method: 'post',
data: data,
async: true,
processData: false,
contentType: false,
success : cc
});
}
}
function cc(data){
$("body").css("cursor", "default");
}
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
날씨가 무더운데 귀한 시간을 내서 답변해주셔서 감사합니다!
말씀해주신 방식으로 적용해봤는데 제가 테스트한 환경에서는 별다른 차이가 없네요 ㅠㅠ
아무래도 제가 처음부터 스크립트를 잘못 작성해서 발생한 문제인 것 같아요~
수정해야 할 부분이 많아지겠지만 반복문을 자바스크립트에서 돌리는 것이 아니라,
ajax에서 한꺼번에 넘긴 후에 PHP에서 반복문을 돌리는 방법으로 해결해야 될 것 같네요 T.T
그럼 오늘 많이 더운데 항상 건강하시길 기원합니다!
다시 한 번 감사드려요~