질문/조언질답게시판

라이믹스에서 exec_xml 요청 헤더 보면 보낼때부터 xml 형식이 아니라

 

일반 post 형식으로 보내고 타입도 json으로 보내고 응답도 json 형식으로 옵니다.

 

라이믹스에서 exec_xml , xml 방식으로 사용은 불가능한가요 ?

 

댓글을 ajax로 구현 하려고 보니 json 보다는 xml cdata로 게시판스킨 입힌채로 가져와서 넣는게 쉽고 스킨 대응도 편할 것 같아 보이는데요.

 

아니면 혹시 이 부분이 json 으로 구현된 사이트 참고 할 만한 곳이 있을까요 ?

 

 

 

 

  • profile

    기존에 XE에서 사용하던 CDATA 인코딩 방식이 워낙 허술해서 내용이 길어지거나 특수문자가 들어가면 깨지곤 했습니다. 심지어 브라우저에 따라 해석 방법이 다르기도 했고요. (사실 이건 브라우저 잘못도 있지만... 예: IE11)

    exec_xml을 사용하더라도 XE 자체적으로 json으로 변환하여 반환하도록 되어 있었고, 이 과정에서 발생하는 비효율도 상당히 컸기 때문에 라이믹스에서는 모두 들어내고 처음부터 json만 사용하도록 했습니다. 하위 호환성을 위해 exec_xml 함수를 남겨놓기는 했지만, 앞으로는 내부적으로 exec_json을 호출하는 간단한 wrapper에 불과하게 될 수도 있고요. 이래저래 xml은 적폐청산대상 취급일 겁니다.

    어차피 CDATA를 사용한다면 xml이든 json이든 결국 반환되는 것은 그냥 문자열이니 기능상의 차이는 없습니다. xml이 html처럼 생겼다고 해서 둘이 궁합이 더 잘 맞을 거라고 생각하지는 마세요. xml을 html처럼, html을 xml처럼 다루려고 하면 위와 같은 문제가 생깁니다.

  • profile ?
    먼저 자세한 답변 감사합니다.

    말씀하신 부분 이미 검색을 통해서 먼저 보긴 했습니다. 예전에 비슷한 문제에 답변을 남기신 부분이 있더라구요.

    일단 제가 언급한 방식은 일베(논란 사이트인건 예외로 하고 그 사이트에 ajax 기술이 많이 참고 할만 하더라구요.)라는 사이트에서 사용하는 ajax 댓글 구현 방식입니다. 그쪽은 보니까 게시판 댓글 부분을 댓글리스트 + 페이징처리까지 한 html을 cdata로 가져와서 jquery로 본문에 삽입하는 방식을 사용하더군요.

    근데 그 부분을 초보자가 exec_json 방식으로 순수 데이터만 받아서 페이징, 해당 게시판 스킨 적용 상태로 출력 하려고 해보니 엄두가 안나더라구요.

    그 부분을 어떻게 처리 해야 할까요...

    act dispBoardContentCommentList 를 pagination 포함하여 스킨까지 입힌채로 html 출력 후 ajax (exec_json) 로 가져오려고 한다면 현재 라이믹스에서 어떤 부분들을 건드려서 만드는게 좋을까요 ?

    아니면 좀더 표준이 되는 처리 방식이 있다면 조언 주시면 감사하겠습니다.
  • ? profile

    json이라고 하면 댓글 객체 하나하나를 다 인코딩해서 전달하는 방식을 생각하시는 모양인데, 이미 완성된 html 내용을 넣어도 아무 상관이 없습니다. xml cdata에 통째로 집어넣든 json 속성에 통째로 집어넣든 그게 그거잖아요. json이 훨씬 깔끔하고 인코딩 오류의 가능성이 적다는 차이 뿐...

    xml: <속성><![CDATA[html 내용]]></속성>
    json: {"속성":"html 내용"}

    그러나 이미 완성된 html 내용을 받아올 때는 xml, json 둘다 신경쓰지 말고 $.get()으로 해당 주소의 html을 그대로 받아오는 것이 가장 편리합니다. layout=none 파라미터를 넣어주면 레이아웃은 제외하고 게시판 스킨에 해당하는 부분만 깔끔하게 나와요.

  • profile ?
    아 네 그렇죠. 뭘로 가져오던 상관없죠 ;

    너무 한쪽으로만 생각했네요.
    (최근에 여러 분들이 작성하신 강좌나 분석글을 보는 중인데... 코어는 건드리지 말고! 되도록 XE 내부 기능을 사용하여! 강조를 하는걸 봐서 그런지 너무 한쪽으로 꽂혔나봐요.)

    var params = new Array();
    params["mid"] = 'qna';
    params["category"] = '671911';
    params["document_srl"] = 1026464;
    params["act"] = 'dispBoardContentCommentList';
    params["layout"] ='none';
    $.get('index.php', params , function(){});

    그런데 테스트해보니 dispBoardContentCommentList 액션은 단독으로 호출이 안되는 모양입니다.

    관련 소스 부분을 찾아봐야겠습니다.

    답변 감사합니다.
  • ? profile

    네, 소스를 보니 해당 액션은 단독 호출이 안 되도록 막아놨네요.

    짧은주소 사용시 index.php 같은 상대주소로 호출하면 에러납니다. 기본 제공되는 request_uri 변수를 사용하면 언제나 정확한 주소로 요청할 수 있습니다. 현재 mid를 의미하는 current_mid 변수도 자바스크립트에서 사용할 수 있습니다.

  • ? profile

    라이믹스를 사용하고 스킨에서 댓글 부분이 comment.html로 되어 있다면 dispBoardCommentPage 액션을 사용할 수 있습니다. 스킨에 해당 파일이 없다면 라이믹스에 포함된 XEDITION 스킨을 참고하세요.

  • profile ?
    제가 찾고 원하던 부분이 딱 그대로 이미 있었네요. ㄷㄷㄷㄷㄷㄷ

    한참 보다 왔습니다.

    헉 근데 getBoardCommentPage 액션 아닐까요 !? dispBoardCommentPage 는 안 되는 것 같아요.

    https://github.com/rhymix/rhymix/blob/2cca84bd3fb0771d4c1d1a3250bab3741c297a95/modules/board/board.mobile.php

    정말 감사합니다. 👍
  • ? profile

    getBoardCommentPage는 모바일 스킨을 사용해서 xml이나 json으로 돌려주고 (원래 있던 것)
    dispBoardCommentPage는 PC용 스킨을 사용해서 html로 표시합니다.

  • profile ?
    아하 ! 네 말씀하신대로 작동 하네요.

    dispBoardCommentPage 는 제가 json 요청 해서 안 됐던거 같습니다.
    get 방식으로 (요청 get, 응답 plain html)작동하네요.

    늦은 시간까지 감사합니다.

서버에 요청 중입니다. 잠시만 기다려 주십시오...