질문 Q #11665
ajax 질문좀 드리겠습니다.
쫑 2014-10-06 15:59:36
기존에 만들어 놓았던 게시판을 

코드이그나이터로 바꾸는 중인데요

기존 게시판 댓글도 ajax를 이용하여 만들었거든요

책에 나와있는 방식은 댓글 리스트를 바로 출력하기 보다는 append 방식으로 추가하는 것으로 판단되서

이러면 css를 2번작업해야할 것 같아서 기존 게시판과 동일하게 아래와 같이 하고 싶거든요

$.post("/codeigniter/board/comment_add", {table:table, view_no:view_no, content:content}, function(data){
     $('#comment').load('board_comment_v.php');
}); 

그리고 제가 MainController를 만들고 여기서 _remap과 $method를 출력해줍니다.

그리고 나머지 Controller에서 다시 MainController를 상속합니다.

위와 같은 방법을 사용하니 board_comment_v.php을 다시 load하면서 화면에 있는 모든 내용을 $('#comment')

여기에 다 출력해버리네요... 

$('#comment').load('board_comment_v.php'); 구문 그대로 board_comment_v.php 여기서 출력된 

내용만 $('#comment')에 추가하려면 어떻게 해야할지... 부탁드리겠습니다 ㅠㅠ
답변 6
#1 양승현 2014-10-06 16:05:08
화면의 모든 내용이 해더,게시글부분,코멘트부분,푸터 부분이겠지요?
_remap에서 해더,푸터부분을 출력하시는 거라면 해당 부분에 조건절을 걸어 주셔서 처리하시면 될거 같아요.
저같은 경우는 ajax일경우 해더와 푸터를 따로 지정하여 쓴답니다.
질문하신게 이게 맞는건지 모르겠네요. ^^;
 
#2 쫑 2014-10-06 16:12:08
public function _remap($method)
    {
        if (!$this->input->is_ajax_request()){
            $this->load->view('menu_v');
        }

        if(method_exists($this,$method))
        {
            $this->{"{$method}"}();
        }
    }

위 부분이 제 _remap 입니다. 

일단 메뉴 부분은 조건절로 출력을 막았으나  $this->{"{$method}"}(); 을 어떻게

조건절로 넣어야 하는지요...
#3 양승현 2014-10-06 17:19:48
쫑 // 리맵부분에선 막는부분이 없네요. 해당 메소드로 갔을때 상하단 출력을 하는가요? 필요한 부분만 ajax로 호출시 출력되도록 해야겠죠. 해당 command_add에서 다른 부분들도 다 출력을 한다면 그부분에서 조건절로 막아야 하고요. ^^;
#4 쫑 2014-10-06 17:29:20
양승현 //

음... 댓글을 달때 _remap에 오는 메소드 또한 view 입니다.

상하단 출력을 원하는게 아니라 댓글을 달때 view에 속하는 모든 소스가 

$('#comment')안으로 들어 오는것이 문제점 입니다.

board_comment_v.php에 해당 view에 대한 댓글을 출력하는 소스가 들어있습니다.

$.post("/codeigniter/board/comment_add", {table:table, view_no:view_no, content:content}, function(data){

     $('#comment').load('board_comment_v.php');
}); 

위 jquery에 /codeigniter/board/comment_add 이 부분이 해당 view에 대한 댓글을 추가하는 부분이구요

저장 후 다시 해당 view에 대한 댓글을 load 하고 싶은데 현재 view에 있는 모든 html 소스가 $('#comment')에 들어옵니다.



 
#5 들국화 2014-10-06 17:35:36
댓글 내용만 추가 하고 싶으면 따로 뷰를 만들거나 컨트롤에서 HTML을 빤들거나 해서 뿌려 주면 됩니다.
#6 쫑 2014-10-06 17:41:07
들국화 //

<?
    $view_no = $this->uri->segment(5);
    $sql = "SELECT * FROM se_board_comment where view_no = $view_no";
    $query = $this->db->query($sql);
    $comment = $query->result();
?>
<? foreach($comment as $cm)    { ?>
    <div class="cm_row">
        <span><?=$cm->writer?></span>
        <span><?=$cm->content?></span>
        <span><?=substr($cm->date,0,10)?></span>
        <span>     <?=$cm->no?></span>
    </div>
<? } ?>

위에 소스가 board_comment_v.php 소스 입니다.

view에는 바로 include 로 출력하고 추가 뒤에 load로 다시 갱신합니다만

view의 소스 전체가 $('#comment')에 들어옵니다