Extra Form
PHP PHP 7.3
CMS Rhymix 2.x
<form action="/" id="contact_form" method="post" enctype="multipart/form-data"  class="rx_ajax" data-callback-success="success_callback"  data-callback-error="error_callback" >
                    <input type="hidden" name="module" value="map" />
                    <input type="hidden" name="act" value="procMapInsertContact" />

                
                <div id="title_list" class="content_body" style="width: 100%;">
                    <p style="color: #9bce98; padding-top: 3em;">고객님의 문의에 대한 답변은 문의 등록 시 기재해주신 이메일로 회신 드립니다. <br>
                        보내주신 문의사항에 대해서는 순차적으로 답변 전달 드리고 있습니다.</p>
                </div>
                <div id="table_name" class="com" style="padding-top: 3em; width: 100%;">
                    <div id="name" style="color:#efb250; padding-right: 3em;">이름</div>
                    <div id="alive"><input class="w-full" type="text" id="input_name" name="name"></div>
                </div>
                <div id="table_email" class="com" style="padding-top: 3em; width: 100%;">
                    <div id="email" style="color:#efb250; padding-right: 2.3em;">이메일</div>
                    <div id="alive"><input class="w-full" type="text" name="input_email"></div>
                </div>
                <div style="font-size: 12px; padding-left: 9.1em">
                    <p style="color: #9bce98; padding-top: 1em;">문의사항에 대한 답변은 이메일로 회신 드립니다. 정확한 이메일 주소를 입력해주세요.</p>
                </div>
                <div id="table_counseling" class="com" style="padding-top: 2em; width: 100%;">
                    <div id="counseling" style="color:#efb250; padding-right: 1.5em;">문의내용</div>
                    <div id="text_area" style="width: 458px;">
                        <textarea class="p-2" id="textbox" name="review" rows="10"
                            style="width: 100%; border: 1px solid #9bce98; "></textarea>
                    </div>
                </div>
                <div id="table_send" class="com" style="padding-top: 2em; width: 100%;">
                    <div id="counseling" style="color:#efb250; padding-right: 1.5em;">첨부파일</div>
                    <div id="alive"><input type="file" name="upload_file"></div>
                </div>
                <div style="font-size: 12px; padding:1em; padding-left: 9.4em;">
                    <p style="color: #9bce98; padding-top: 0.2em;">JPG, PNG, JPEG, PDF 만 업로드가 가능합니다. (5MB 이하)</p>
                </div>
                <div id="send" style="width: 100%;">
                    <button class="button_click">전송</button>
                </div>
                </form>

 

 

 

php

$vars = Context::getRequestVars();

$module_srl = '186'; 


$config = $this->getConfig();

$obj->status = $config->stats;
$obj->comment_status = 'ALLOW';
$obj->title = '상담 신청 '.$vars->name.'님';
$obj->content = '이름 : '.$vars->name. '<br />'.'이메일: '.$vars->input_email . '<br />상담내용: ' . $vars->review;

$obj->nick_name = $vars->name;
$obj->module_srl = $module_srl; 
$oController =  getController('document');
$result = $oController->insertDocument($obj);

if(Context::get("upload_file")){
//첨부파일에 대한 정보는 Context::get으로 name을 입력만 해주면 됩니다.
$upfile= Context::get("upload_file");
//upload_target_srl을 입력해줍니다. 여기서는 테스트를 위해 고정값을 입력했습니다. 필요한 숫자를 구하시면 되겠죠.
$upload_target_srl = $result->variables['document_srl'];
// 게시판 모듈 _SRL

//XE에서는 file이란 module을 제공하고 있습니다.
$oFileController = getController('file');
$output = $oFileController->insertFile($upfile, $module_srl, $upload_target_srl);


$oFileController->setFilesValid($upload_target_srl, 'doc'); 


// 첨부파일 개수 조정 메소드

$oController->updateUploaedCount($upload_target_srl); 
}
$this->setMessage('정상적으로 등록되었습니다');
$this->add('msg', 'good'); 

 

 

js

function error_callback(ret){
        console.log(ret);
    }

    function success_callback(ret){
        console.log(ret);
        console.log('good'); 
        
    }

 

 

메세지는 출력됩니다. 그런데 콜백으로 연결이 안됩니다. 

찾다보니, 기진곰님의 글은 찾았는데, 무슨 의미인지 잘 이해가 안되서요 

지금 이 메소드는 실제 AJAX로 제출되는 경우에 해당안되는건가요? 

 

dd.png

  • profile

    네, <input type="file">이 있으면 안됩니다.

     

    실제 AJAX로 제출되는 경우에만 콜백 함수를 지원합니다.

    파일 업로드는 AJAX가 아니라 보이지 않는 iframe으로 제출됩니다.

    따라서 파일 업로드 input이 포함된 폼에서는 콜백 함수가 지원되지 않습니다.

    나중에 개선할 예정이지만 아무튼 지금은 안됩니다.

  • profile
    감사합니다 ~