티스토리 뷰
반응형
이거 수정하느라 반나절이 흘렀다.
알고보면 너무 단순한 것에 오류였음을 깨달았을때는 이미....
시간이 훌쩍 지난 후에....
하지만, 기록을 남겨서 다음에는 다시 반복하지 않도록 노력하자.
// 화면에 뿌려주는 함수 displayfile();의 중복호출을 방지하기 위한 코드
var isDisplaying = false;
// 첨부파일 멀티업로드 이중호출 금지되는 법
$("#upfile").off('change').on('change', function(e) {
// 선택된 파일이 없는 경우 반환
if (this.files.length == 0) {
return;
}
$("#id").val($("#num").val());
$("#parentid").val($("#num").val());
$("#fileorimage").val('file');
$("#item").val('attached');
$("#upfilename").val('upfile');
$("#tablename").val('workdb');
$("#savetitle").val('작업지시서 첨부파일');
// 파일 서버에 저장하는 구간
// 폼데이터 전송시 사용함 Get form
var form = $('#board_form')[0];
// Create an FormData object
var formdata = new FormData(form);
// console.log(data);
// 중복호출 금지
// data 전송해서 php 값을 넣기 위해 필요한 구문
ajaxRequest5 = $.ajax({
enctype: 'multipart/form-data', // file을 서버에 전송하려면 이렇게 해야 함 주의
processData: false,
contentType: false,
cache: false,
timeout: 600000,
url: "../file/file_insert.php",
type: "post",
data: formdata,
success : function(data){
console.log(data);
if (!isDisplaying) {
displayfile();
}
},
error : function( jqxhr , status , error ){
console.log( jqxhr , status , error );
}
});
});
// 첨부파일 삭제
delPicFn = function(divID, delChoice) {
// DATA 삭제버튼 클릭시
Swal.fire({
title: '첨부파일 삭제',
text: " 삭제는 신중해야 합니다. '\n 삭제 하시겠습니까?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '삭제',
cancelButtonText: '취소' })
.then((result) => { if (result.isConfirmed) {
// 중복호출 금지
ajaxRequest6 = null;
if (ajaxRequest6 !== null) {
ajaxRequest6.abort();
}
// data 전송해서 php 값을 넣기 위해 필요한 구문
ajaxRequest6 = $.ajax({
url:'./file/del_file.php?savename=' + delChoice ,
type:'post',
data: $("board_form").serialize(),
dataType: 'json',
success : function(data){
ajaxRequest6 = null;
const savename = data["savename"];
// 시공전사진 삭제
$("#file" + divID).remove(); // 요소 삭제
$("#delPic" + divID).remove(); // 버튼 삭제
},
error : function( jqxhr , status , error ){
ajaxRequest6 = null;
console.log( jqxhr , status , error );
}
});
}
}) } // end of delPicFn
async function displayfile() {
// some other code...
await displayfile_sub(); // This line will block until displayfile() has completed
// code here won't run until displayfile() is finished
}
// 첨부된 파일 불러와 화면에 표시하는 루틴
async function displayfile_sub() {
isDisplaying = true; // 함수가 실행 중임을 표시
$('#displayfile').show();
if($("#num").val() != null && $("#num").val().trim() !== '')
params = $("#num").val();
else
params = $("#tmpKey").val(); // 임시키 부여함
console.log('전송하는 params');
console.log(params);
var tablename = 'workdb';
var item = 'attached';
var url = '../file/load_file.php?id=' + params + '&tablename=' + tablename + '&item=' + item;
var formData = '';
try {
let response = await fetch(url, {
method: 'POST',
body: formData
});
if (!response.ok) throw new Error("Response Error: " + response.status);
let data = await response.json();
isDisplaying = false; // 함수 실행이 완료됨을 표시
const recid = data["recid"];
console.log('첨부 이미지 및 파일 json data');
console.log(data);
$("#displayfile").html('');
for(i=0;i<recid;i++) {
$("#displayfile").append(" <div id='file" + i + "'> <a href='./uploads/" + data["file_arr"][i] + "' download='" + data["realfile_arr"][i]+ "'>" + data["realfile_arr"][i] + "</div> " );
$("#displayfile").append(" <button type='button' class='btn btn-danger btn-sm' id='delPic" + i + "' onclick=delPicFn('" + i + "','" + data["file_arr"][i] + "')> <i class='bi bi-dash-circle'></i> </button> ");
}
} catch (error) {
isDisplaying = false; // 함수 실행이 실패했으나 완료됨을 표시
console.log(error);
}
}
멀티파일을 저장하고 불러오는 함수를 나름 만들었는데,
아직도 더 손봐야 할지 모르지만, 일단 기록을 남겨둔다.
나의 노력의 시간들이다.
반응형
'IT tech Coding > javascript' 카테고리의 다른 글
자바스크립트로 달력관련 뭔가를 만들고자 할때 자주 사용하는 방법연구 (0) | 2023.05.31 |
---|---|
python 라이브러리를 혹시 자바스크립트에서 불러서 쓰는 방법은 없는가? (0) | 2023.05.28 |
html의 canvas의 크기는 얼마까지 가능할까? (0) | 2023.05.20 |
data.push(...sectionData); 자바스크립트 ... 이게 뭐지? (0) | 2023.05.08 |
[자바스크립트] 한글 입력 감지 (초성, 중성, 종성 포함) - 화면 출력 코드 (4) | 2023.04.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 오블완
- 테크에능한여성
- 엑셀보호
- 코딩튜토리얼
- ajax오류메시지
- json파일형태보기
- 코딩효율성
- 오토핫키가이드
- 파이썬코드줄바꿈방법
- 티스토리챌린지
- 효율적코딩방법
- #파이썬패키징
- 프로그래머생활
- 도면자동생성
- 스크립트작성기초
- 엑셀입력보호
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- json파일편하게보는법
- 캐드자동작도
- 뫄프로그래밍
- 구글드라이브API
- chatGPT3.5파이썬버전
- sql문장 날짜계산
- #InstallForge
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- isset을 적용해야 하는 이유
- Bootstrap 5
- 엑셀셀보호
- General error: 2031
- #프로그램설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함