Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

새로고침 없는 댓글 삭제를 시도 중입니다.

예전에는 잘 했었는데ㅜㅜ

이번에는 exec_json을 실행시키면 '잘못된 요청입니다'라는 경고문구가 뜨고 스크립트 명령을 튕겨냅니다.

 

function delComment(comment_srl) {
    var message = confirm('댓글을 정말로 삭제하시겠습니까?');
    if ( message ) {
        exec_json('board.procBoardDeleteComment', {comment_srl: comment_srl}, function(r) {
            console.log(r);
            location.reload();
        });
    } else {
        var li = $('#comment_' + comment_srl);
        toggleCommentForm(li, 'delete');
        return false;
    }
}

 

현재 위와 같이 되어 있는데요.

콘솔로 찍어봐도 r값이 찍히질 않아요.

이 함수를 실행시켜주는 건 아래의 클릭 이벤트인데요.

 

// Modify and Delete Comment Directly
$(document).on('click', '.fdb_nav a[href*="dispBoardModifyComment"], .fdb_nav a[href*="edit"], .fdb_nav a[href*="dispBoardDeleteComment"], .fdb_nav a[href*="delete"]', function() {
    var li = $(this).closest('li');
    var type = $(this).attr('href').indexOf('elete') === -1 ? 'edit' : 'delete';
    if ( !li.find('form[rel='+ type +']').length ) {
        $.get($(this).attr('href')).done(function(response) {
            var content = $(response).find('form')[0].outerHTML;
            $(content).attr('rel', type).css({'border-top':'none'}).hide().appendTo(li);

            toggleCommentForm(li, type);

            if ( type === 'delete' ) {
                var target_srl = li.find('[name="comment_srl"]').val();
                li.find('form[rel='+ type +']').attr('onsubmit', 'return delComment('+ target_srl +');');
            }
            li.find('form[rel='+ type +']').find('[onclick^="history.back()"]')
                .attr('onclick', 'toggleCommentForm(jQuery(this).closest(\'li\'), \''+ type +'\'); return false;');
        });
    } else {
        toggleCommentForm(li, type);
    }

    return false;
});

 

댓글 목록에서 삭제 링크를 클릭하면 -> 해당 페이지를 $.get으로 갖고 와서 -> 삭제 명령일 경우 -> form 부분의 onsubmit 속성을 return delComment('+ target_srl +') 으로 해주고 있습니다.

그렇게 해서 스킨 템플릿 수정 없이 스크립트만으로 댓글 삭제를 하려고 하는 거죠.

 

문제 해결을 위해 다음과 같은 시도를 해봤습니다.

- 댓글번호에 해당하는 target_srl에 따옴표도 해주고 다해봤는데 결과는 계속 동일해요.

- 혹시 몰라 board 모듈의 module.xml을 봤는데 procBoardDeleteComment가 누락되지 않고 존재하고 있고,

- procBoardDeleteComment 함수에 들어가서 디버그를 찍어봤는데도 오류 메시지가 검출되지 않는 건 exec_json 차원에서 실행이 안된다는 뜻 같은데요.

 

제가 어느 부분을 놓치고 있는 것일까요?

https://dev.aporia.blog/board_zjsF61/44317

여기에서 댓글 생성하고 직접 삭제 시도를 해보시고 조언 주시면 감사하겠습니다.

  • profile

    AJAX 없이 댓글 삭제 폼을 제출할 때와 exec_json으로 제출할 때 실제로 어떤 데이터가 오고가는지 개발자도구 네트워크 탭에서 찍어보세요. 꼭 필요한 변수가 누락되었을 가능성이 높습니다. 예를 들면 mid라든지... mid가 필요할 수도 있고, mid가 빠졌는지도 모르죠... ㅎㅎ

  • profile profile

    procBoardDeleteComment 액션에 mid값은 필요가 없는 것으로 알고 있는데요;;;
    물론 ajax없는 댓글 삭제 폼에는 mid랑 document_srl이 다 있지만요.
    그래도 일단 한번 그에 준해서 데이터 확인해보고 동작시켜보라는 말씀이시죠?
    serialize해서 한번 넣어봐야겠네요.

  • profile profile
    대부분의 게시판 관련 액션은 standalone="false"로 선언되어 있으므로 mid에 종속됩니다.
    { comment_srl: comment_srl, mid: current_mid }
  • profile profile

    그런 차이가 있다면 뭔가 납득이 되기도 하네요.
    저녁 때 mid값 넣고 확인해보겠습니다!

  • profile profile

    다행히 삭제 동작이 원활하게 되었습니다!

    이제 비회원 비밀번호 처리가 남았네요ㅎㅎ

  • ?
    에러 발생시 소스 파일이름하고 라인값 찍어주면 정말 편할텐데 말입니단
  • ? profile
    이런 팁을 남긴 적이 있을 정도로 https://xetown.com/topics/402724
    예전에는 mid값 없이 그냥 됐었는데 안 되길래 어제 하루 종일 한참 헤맸네요.
    말씀하신 것처럼 어디서도 에러메시지를 보여주질 않으니 살짝 힘들었습니다;;;
  • profile profile

    웬만한 오류는 디버그 기능을 켜면 다 나옵니다.
    페이지 로딩 후에 실행한 AJAX 요청도 대부분 디버그 패널에 나옵니다.

    성능면에서도 xdebug 같은 복잡한 확장기능보다 라이믹스 디버그가 더 가볍습니다.

    관리자나 개발자라면 디버그를 상시 켜놓고 운영하셔도 됩니다.

    "보안정책상 허용되지 않습니다", "잘못된 요청입니다" 이거 2개가 항상 문제인데요,
    체크하는 곳이 한두 군데가 아닌데다, 어느 체크에 걸렸는지 표시하는 것이 해킹에 도움이 될 수도 있어서...

    만약 이 2개의 메시지와 관련된 위치를 표시한다면 관리자가 디버그를 켜놓았을 때,

    또는 서버의 에러 로그에만 남기는 방향으로 가야 할 것 같습니다.

     

    어쨌거나 관리자나 개발자라면 디버그 + 에러 로그 확인이 필수라는 얘기죠. ㅎㅎ

  • profile profile

    라이믹스 디버그 패널 완전 좋습니다.
    proc~ 같은 액션이야 어차피 에러 로그를 봐야 하지만, 그 외에는 아주 편리하게 이용하고 있어요.
    어지간하면 바로바로 확인 가능하니 손맛이랄까요ㅎㅎ 개발하는 맛을 잊기가 힘듭니다ㅋㅋㅋ

     

    덧. 비밀번호 폼도 완료입니다ㅋ

  • profile profile
    디버그 패널에서 MAIN PAGE라고 나오는 곳 오른쪽의 화살표를 클릭하면 해당 페이지 로딩 과정에서 발생한 디버그 기록은 접히고, 이후에 발생한 AJAX 요청과 관련된 정보가 순서대로 나오므로 proc 액션도 어느 정도 커버됩니다.^^
  • profile profile

    AJAX 디버그 기록이 나오는 건 알고 있었는데 메인 페이지 접히는 건 몰랐었네요ㅎㅎㅎ 잘 참고해보겠습니다 😀