CI 묻고 답하기

제목 remap 이면 ajax가 안되나요?
글쓴이 수야디벨 작성시각 2013/08/21 17:14:43
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 19566   RSS


안녕하세요. _remap질문입니다.

_remap이라는걸 교재때문에 처음알아서 사용해 보고 있는데요

_reamp이 있으면 jquery ajax시에 Syntaxerror()가 나거든요?

보통 jquery Ajax아래  형태를 많이 쓰고 있는데..

$.ajax({
          type:'post',
          url:'/mypage/isDuplication',               //데이터를 요청할 페이지
          dataType: 'json',                   //데이터 유형
          error:function(xhr,status,e){       //에러 발생시 처리함수
               console.log(e);
          },
          success: function(jdata){           //성공시 처리 함수, 인수는 위에서 data를 사용한 경우
               console.log(jdata);              
          }
    });

* mypage 컨트롤 isDupplication 함수.
function isDupplication()
{
  echo json_encode("1");
}


이때 아무리 해봐도 error로 빠지면서 sysntaxerror() 가 나오길래 ..
정말 이상하다 싶었거든요.

1이라는 값이 찍혀야 하는데, 에러가 나니까요 .

그래서 계속 시도한 끝에 원인이 remap이였어요.

remap을 제거하고 , include_once로 view에 헤더와 푸터를 추가해주니까

정상적으로 작동합니다.

개인적으로는 ajax로 /
mypage/isDuplication 라는 함수를 호출하여도

기본적으로 header와 fotter가 로딩이되어버리기 때문에, json_econde를 제대로 받아오지 못하는걸까요?

이상하네요.. 

다른 분들도 이상없이 사용했다면 , 제가 잘못하고 있는걸텐데..

이런경우가 있을수도 있나요?;;


 다음글 $.post 한글 공백되는 문제 (11)
 이전글 [초보질문] 간단url 만들기 고수님들 좀 봐주세요 ㅠ... (7)

댓글

변종원(웅파) / 2013/08/21 17:29:56 / 추천 0
당연하죠. _remap()은 모든 메소드에 자동으로 추가를 해주는 겁니다.

그래서 ajax를 사용하려면 ajax 처리용 컨트롤러를 따로 만들거나

ajax용 메소드는 메소드명_ajax로 만들고 _remap()에서 예외처리합니다.

팝업도 마찬가지구요.

public function _remap($method)
    {
        //헤더 include
        if (!strpos($method, '_ajax'))
        {
            $this->load->view('top_v');
        }


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

        //푸터 include
        if (!strpos($method, '_ajax'))
        {
            $this->load->view('bottom_v');
        }
    }

수야디벨 / 2013/08/21 17:50:22 / 추천 0
웅파 //
아 .. 역시 그런거였군요 ㅠ

아직 교재를 ajax다루는 부분까지 살펴보지 못해서 이런 문제가 발생했네요

교재를 보니까 ajax 파트에서 전부 명시되어 있는 내용인데, 제가 아직 그 부분을 못봐서 그런거네요 ㅠ

책 전부 정독 부터 해야겠네요 .

감사합니다.ㅎ
맥스 / 2013/08/21 17:51:08 / 추천 0
 저는 이렇게 처리합니다.


 public function _remap($method)
 {
     if ($this->input->is_ajax_request()) {
         if (method_exists($this, '_' . $method)) {
              $this->{'_' . $method}();
         }
     } else {
         if (method_exists($this, $method)) {
              $this->$method();
         } else {
              show_error('삐~~~');
         }
     }
 }

들국화 / 2013/08/21 18:13:12 / 추천 0
$this->input->is_ajax_request()
이거 좋네요...
팝업은 어떻케 하세요? 디자인을 다르게 써야 할 경우는 어떻케 하세요?
맥스 / 2013/08/21 18:16:18 / 추천 0
실제 시스템에서는 후크를 이용해서 작업을 합니다.
당연히 팝업도 처리 하구요
위 소스에서는 표현되지 않은 부분이 있습니다.
들국화 / 2013/08/21 18:30:06 / 추천 0
맥스// 저도 둘중 어느걸 쓸까 하다가 후크를 사용 합니다.

장단점이 있을듯 한데 다른분들은 어떤게 편한지 궁금하네요.
변종원(웅파) / 2013/08/21 18:30:57 / 추천 0
팝업은 _pop 으로 처리.. ㅋㅋ

팝업용 헤더, 푸터 따로 구비.
risa / 2013/08/22 11:49:42 / 추천 0
저도 귀찮아서 맥스님 처럼 했어요

ajax 체크해서 ajax 이면 헤더 푸터 안달리게 만들고

popup은 그냥 컨트롤러 따로 뺏어요.

ajax는 몰라도 팝업은 다른 컨트롤러에서도 재사용할 가능성이 있겠다고 생각되서

그냥 하나의 팝업 컨트롤러에서 팝업 전부를 컨트롤 하게끔 말이죠.