Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

제가 업로드를 하고 싶은 이미지를 선태하여 exec_json으로 넘기려고 했더니 type error illegal invocation오류가 발생합니다. 

혹시 이 오류를 처리하는 방법이 있을까요?

서핑을 해보니 ajax로 값을 넘길때 contentType: false, processData: false를 추가하라고 하더라구요

exec_json 함수에서 contentType: false, processData: false를 추가하려면 어떻게 해야하는지요?

  • profile

    시도하고 계신 코드를 보여주세요.

    자신의 정보를 공개하는 만큼 도움을 받을 수 있습니다.

    뭘 하고 계신지 알 수 없으니 저런 속성을 추가한다고 해서 해결된다는 보장도 전혀 없고요.

     

    원론적으로, 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 오류가 납니다. 

  • profile

    파일 업로드가 포함된 폼은 일반적인 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>