CI 묻고 답하기

제목 ajax 질문이요~
글쓴이 kimswave 작성시각 2010/05/26 10:21:57
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 27556   RSS

--------------------------------------------- 요기 아래가 기본 클라이언트 측 뷰 단입니다. -------------------------------
--------- ajax 로 호출하고 있구요.


<div class="cls100_p">
         <h4><span class="clsCategory"><?php echo $this->lang->line('CATEGORIES');?></span></h4>
         <div class="clsCategoryList clearfix" id="catInner"> </div>
</div>




new Ajax.Request('<?php echo $base_url.'/home/getCate/'; ?>'+catid,

  {
    method:'get',

    onSuccess: function(transport){
      var response = transport.responseText || "no response text";
      document.getElementById('catInner').innerHTML = response
    },

    onFailure: function(){ alert('Something went wrong...') }



------------------------------------------------    요기 아래가 ajax로 호출된 컨트롤러입니다.


    function getCate(){
        $catid = $this->uri->segment('3','0');
        $conditions = array('categories.group_id' => $catid);
        $this->outputData['categories'] = $this->skills_model->getCategories($conditions);
        //pr($this->outputData['categories']->result());exit;
        $this->load->view('categoryList',$this->outputData);      -->여기서 질문입니다.
        이렇게 view를 호출하면 ajax의 응답이 되는건가요? 위의 자바스크립트에서 ajax로 이 컨트롤러로 요청을 보내었고,
        이 컨트롤러 가 받았는데 여기서 하는 일이라곤 모델 불러와서 view 호출한 거 밖에 없는데 이게 응답이 되는건가요?
        코드 이그나이터에서는 이렇게 view만 호출하면 ajax의 서버측 응답이 되나요? innerHTML에 들어가는...
        보통의 ajax는 json이나 xml로 요청을 주고 받는 것으로 알고 있는데요. 서버측에서 response 형식으로 응답하는 걸로
        알고 있는데요.
코드 이그나이터의 콘트롤러 단에서 $this->load->view 하게 되면 이게 바로 응답이 되는건가요? 일종의 forwarding?
      
    }


----------------------------- 요 아래가 categoryList 뷰의 내용이구요. -------------------------------

<ul class="clsFloatLeft">
<?php
if(isset($categories) and $categories->num_rows()>0)
 {
    $i=0;
    foreach($categories->result() as $category)
    {
         $name = replaceSpaceWithUnderscore($category->category_name);    ?>
       <li><a href="<?php echo site_url('project/category/'.$name); ?>"><?php echo $category->category_name;?></a></li>
       <?php $i++;
    }
}  ?>
</ul>




 다음글 [초보] 라이센스에 관하여~ (7)
 이전글 CI 로그 기록시 느려짐 현상. (1)

댓글

변종원(웅파) / 2010/05/26 11:29:26 / 추천 0
기존방식과 동일하게 view에서 호출하고 view에 데이터를 갱신해주는 방식 (기술하신 방식)대로 하시면 됩니다. 

포럼소스 보시면 댓글 쓰는 부분이 ajax로 되어 있습니다. 그 부분 보시면 어떻게 구현하고 있는지 참고가 되실 겁니다.
kimswave / 2010/05/26 12:21:17 / 추천 0
그런데....

컨트롤러 home의 함수인 getCate()를 ajax 요청 대상 uri로 지정했는데요,

getCate() 에서 하는 일은 $this->load->view('categoryList',$this->outputData);

이것 밖에 없는데 이게 어떻게 document.getElementById('catInner').innerHTML = response

여기에 들어갈 응답이 되는지.. 서블릿의 경우는 response에 담으면 그게 응답인데,

php도 동일하겠죠?

그런데 여기서는 view 를 호출한 것 밖에 없는데 어떻게 그 호출한 전체 뷰페이지가 응답으로 전달이 되었는지

모르겠어요.

요청에 대한 어떤 응답한다는 루틴도 없고,


그저 ajax로 클라이언트 단에서 요청하면 서버측에서 페이지 뷰를 로드하면 그게 자동으로 다시 ajax 요청에 대한

응답이 되는건가요? 이건 좀 이상하네요.....

변종원(웅파) / 2010/05/26 13:06:04 / 추천 0
컨트롤러 home의 함수인 getCate()를 ajax 요청 대상 uri로 지정했는데요,

-> 기술하신 코드의 ajax라는게 getCate()에서 만들어진 결과를 div에 대입해주는 역할을 합니다.
자바가 됐건 php가 됐건 달라질 것은 없습니다.

제가 이해를 못해서 그러는 것인지 무엇이 문제인지 모르겠습니다. 
$this->load->view()가 어떤 역할을 하는게 궁금하신 건가요?
아니면 ajax의 동작개념이 궁금하신 건가요?
kimswave / 2010/05/26 13:27:27 / 추천 0
getCate() 함수가 어떤걸 리턴하는 것도 아니고, ajax의 응답을 보내는 루틴도 없고 한데,

단지 $this->load->view(cetegoryList, .... ) 라는 것을  했다고 해서

이 view 페이지가 응답으로 전달되었다는게 이해가 잘 안가네요.
변종원(웅파) / 2010/05/26 13:47:48 / 추천 0
먼저 매뉴얼에서 view 부분을 보셔야 할 것 같습니다. (더 정확하게는 mvc패턴에 대해)

ajax요청에 응답을 보내는 루틴은 화면 echo입니다. 화면에 뿌려지면 그걸 받아서 처리하는거죠.

포럼소스를 보라고 했던 이유는 action이라는 컨트롤러에서 view를 호출하지 않고 그냥 화면에 내용을 뿌리고 있습니다. 그것만 봐도 그냥 알수있는 사항입니다. view에 변수를 넘겨서 view에서 화면에 뿌리던, 컨트롤러에서 화면에 그냥 뿌리던 차이가 없습니다. 

제가 궁금하다고 한 것은 php나 ajax의 매커니즘이 궁금하신 것인지 ci의 동작절차가 궁금하신 것인지 
질문을 구분하기 위해서입니다.

그리고 ajax의 응답이 json, xml만 있는게 아닙니다. txt, html 모두 가능합니다.
단순하게 응답프로그램에서 echo "OK": 할 수도 있는 겁니다.

kimswave / 2010/05/26 14:18:01 / 추천 0
아... 그럼 php에서는 echo는 ajax의 응답이 되는거네요?

자바에서

PrintWriter out = response.getWriter();
out.print();

이런식으로 해서 응답 보내는 거랑 똑같은거네요??
kimswave / 2010/05/26 14:30:27 / 추천 0
그런데 보면 컨트롤러에서 여러개의 뷰를 로드하는데,

이건 결국 컨트롤러에서 내가 정의한 함수를 거치면서 각종 뷰를 짜집기해서 끝나면

브라우저에 뿌리던, ajax의 요청에 응답을 하건 하는거네요?

아.... 제가 ajax 개념도 확실히 몰라서 그러는거 같은데,

일반적으로 request, response의 경우 request를 proc로 보내고, 그걸 이용해서 proc 단에서 처리하고 다시 response로 응답을 하는데, response의 일반적인 응답은 만약 서블릿의 경우라면 forward를 주어서 다시 forward할 수 있지만
php의 경우 일반적으로는 브라우저에 이 response를 뿌려주는거죠?

그럼 ajax의 경우에는 request에 헤더정보와 xml(html 들어갈 자리, html도 일종의 xml이니깐)을 딸려서 보내는걸로.... 알고 있는데... 이 데이터를 바탕으로 처리를 하고
그걸 받아서 response하면 요청을 했던 ajax의 클라이언트 단의 XMLHttpRequest 객체로 자동으로 돌아가는건가요? 브라우저에 바로 뿌려지는게 아니라?





 
변종원(웅파) / 2010/05/26 14:41:34 / 추천 0
 ci의 뷰가 최종적으로는 echo로 화면에 뿌립니다.

php에서는 주소에 대응하는 프로그램이 화면에 출력을 하면 그게 바로 response가 됩니다.
ajax요청 처리에서는 그 화면 출력되는 부분을 요청했던 객체로 보내주게 됩니다.

그리고 xml, json 등으로 화면출력을 할때도 결국엔 xml형태로 만들어서 화면에 뿌리는 것밖에 없습니다.
json은 json형태로 만들고 echo로 출력.
kimswave / 2010/05/26 15:04:42 / 추천 0
감사합니다.... 1년쯤 묵은 체증이 날아간 거 같아요~

클리어 됐어요~ 감사합니다... 이거 한 20만원 가치는 되는 답변인듯..
Max / 2010/05/26 18:38:10 / 추천 0
 kimswave님은 웅파님에게 

피지헛 배달시켜 드려야 할듯..ㅋㅋ

아니면, 탕수육 짜장 셋트 메뉴라든가..