exec_json에 contentType: false, processData: false 추가하는 방법은?
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
제가 업로드를 하고 싶은 이미지를 선태하여 exec_json으로 넘기려고 했더니 type error illegal invocation오류가 발생합니다.
혹시 이 오류를 처리하는 방법이 있을까요?
서핑을 해보니 ajax로 값을 넘길때 contentType: false, processData: false를 추가하라고 하더라구요
exec_json 함수에서 contentType: false, processData: false를 추가하려면 어떻게 해야하는지요?
댓글 3
시도하고 계신 코드를 보여주세요.
자신의 정보를 공개하는 만큼 도움을 받을 수 있습니다.
뭘 하고 계신지 알 수 없으니 저런 속성을 추가한다고 해서 해결된다는 보장도 전혀 없고요.
원론적으로, exec_json이 지원하지 않는 기능을 쓰고 싶다면
$.ajax를 직접 사용하면 됩니다.
<form class="x_form-horizontal" name="w_form" method="post" onsubmit="return chk_frm()" enctype="multipart/form-data" data-callback-success="write_callback">
<input type="hidden" id="no" name="no" value="1" />
<input type="hidden" id="mode" name="mode" value="modify" />
<input type="hidden" id="chasi" name="chasi" value="1" />
<input type="file" id="img_path" name="img_path" accept="image/*" value="" >
<textarea id="main_text1" name="main_text[]" rows="5" cols="91"></textarea>
<textarea id="main_text2" name="main_text[]" rows="5" cols="91"></textarea>
<textarea id="main_text3" name="main_text[]" rows="5" cols="91"></textarea>
<input type="submit" value="저장">
</form>
<script>
function chk_frm() {
let main_text = [];
for(let i = 0; i < cnt; i++){
let n = i + 1;
main_text[i] = $('#main_text'+n).val();
}
var params = {
no: $('#no').val(),
chasi: chasi,
mode: $('#mode').val(),
main_text: main_text,
img_path:$('#img_path')[0].files
}
exec_json('test.procDataWrite', params, function (ret_obj) {
alert(ret_obj['msg']);
});
}
</script>
코드올립니다.
<input type="file" id="img_path" name="img_path" accept="image/*" value="" >
이미지 업로드하는 부분을 이렇게 한후에
exec_json에서 params로 변수를 넘깁니다.
그런데 type error : illegal ivocation 오류가 납니다.
파일 업로드가 포함된 폼은 일반적인 AJAX 요청으로 넘길 수 없습니다. 파일을 XML이나 JSON으로 인코딩할 수 없기 때문에 오류가 납니다. 이건 exec_json뿐 아니라 jQuery를 직접 사용하더라도 마찬가지예요.
단, 아래와 같이 rx_ajax 클래스를 추가하고 data-callback-success 속성에 콜백 함수명을 지정하면 (속성을 이미 넣어 놓으셨는데 어디서 보고 쓰신 건지 모르겠네요 ㅎㅎ) 라이믹스에서 마치 AJAX 요청을 한 것처럼 시뮬레이션해 주는 기능이 있으니, 필요에 따라 활용하시기 바랍니다.
<form class="x_form-horizontal rx_ajax" name="w_form" method="post" enctype="multipart/form-data" data-callback-success="write_callback">
<input type="hidden" id="module" name="test" value="1" />
<input type="hidden" id="act" name="procDataWrite" value="1" />
... 중략 ...
</form>
<script>
function write_callback(data) {
alert(data.msg);
}
</script>