CI 묻고 답하기

제목 ajax 질문 좀 드릴게요
글쓴이 localhost 작성시각 2014/12/12 12:07:15
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 15744   RSS
우선 구현하고자 하는 것은 
다수의 라디오버튼이 있고 각각의 value는 0~n 입니다. 
라디오버튼을 체크할 때 마다 해당 value를 읽어서 새로운 데이터가 테이블에 표시되게끔 
하고 싶습니다. 

현재 궁금한 점은 
1. view에서 ajax로 controlller에 post로 value 값을 전송을 하면
2. contoller에서 데이터를 뿌려주는 테이블에 전송을 하고
3. model에서 다시 그 값을 받아 데이터를 읽어 올 때 where절에다 받은 값을 넣어줘서 view에 반영
인데, 모델에 where절에 value값을 넣어도 view에 반영이 안되어서 이렇게 질문을 남깁니다. 

우선 저는 전문적으로 개발을 하는 사람은 아닙니다. 
그냥 여기랑 구글에 검색을 하면서 프로젝트를 진행 중입니다. 
다시 말하면 전문적인 지식은 없다고 보셔도 될겁니다. 
현재 궁금한 점만 해결되면 프로젝트는 완성이라.. 염치 불구하고 글을 올립니다. 
[질문은 이렇게 하면 되는지 ^^]

코드를 보여 드리면 

뷰에서
	<label class="radio-inline">
		<input type="radio" name="chkradio" value="0" checked="checked"> 승인대기
	</label>
	<label class="radio-inline">
		<input type="radio" name="chkradio" value="1"> 승인완료
	</label>
	<label class="radio-inline">
		<input type="radio" name="chkradio" value="2"> 신청취소
	</label>
	<label class="radio-inline">
		<input type="radio" name="chkradio" value="3"> 전체
	</label>"radio" name="chkradio" value="3"> 전체
                                                            </label> 
		  <script type="text/javascript">
		  	$("input[name=chkradio]").on('change', function(){
		  		$.ajax({
		  			type : "POST",
		  			data : 
		  			{
		  				"treatstatus" : $("input[name=chkradio]:checked").val(), 
		  			},
		  			dataType: "html",
		  			url : '/admin1/affiliate_ajax_proc',
		  			success : function(msg)
		  			{
		  				
		  				alert(msg);
		  			}
		  			,beforeSend:function(){
		  				$('.wrap-loading').removeClass('display-none').fadeIn("slow");
		  			}
		  			,complete:function(){
		  				$('.wrap-loading').addClass('display-none').fadeOut("slow");
		  			}
		  		})
		  	});
		  </script>

이렇게 controller로 treatstatus (모델에서 where절에 반영이 될 숫자 ) 를 전송을 하면
ajax를 처리하는 controller에서는 이렇게 받습니다.
 
	function affiliate_ajax_proc()
	{
		$treatstatus = $this->input->post('treatstatus', true);
		$data["results"] = $this->admin_model->gets_affiliate_lists($treatstatus);

	}

아, 그리고 목록을 보여주는 (view를 생성? 하는) controller는
 
	function affiliate($treatstatus)
	{
		$this->load->view('admin1/_head');
		$data["results"] = $this->admin_model->gets_affiliate_lists($treatstatus);
		$this->load->view('admin1/affiliate', $data);
		$this->load->view('admin1/_tail');		
		$this->output->enable_profiler(TRUE);
	}


입니다. 

여기까지는 별 문제 없었지만
질문의 대상인 모델은 
 
	function gets_affiliate_lists($treatstatus)
	{
		$treatstatus = $this->input->post('treatstatus');

		$this->DB1->select("쿼리", false);
		$this->DB1->from('테이블');
		$this->DB1->where('컬럼', $treatstatus); 

		$query = $this->DB1->get();

		if($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$data[] = $row;
			}
			return $data;
		}
		return false;		
	}
인데 여기 
	$this->DB1->where('컬럼', $treatstatus); 

에 받은 값이 들어가고 view에 뿌려주고 싶은데 
도통 방법을 모르겠네요, 영어을 썩 잘하는 편이 아니라 (읽는 것은 어느정도 되는데, 질문을 할 줄 모릅니다)
스텍오버플로를 봐도 잘 이해가 되질 않습니다. 

조언 부탁 드리겠습니다. 
즐거운 점심되시고요

질문의 방법이 잘못되었거나 문제가 있는 게시글이면 말씀 주세요

 
 다음글 뷰->모델에 값 전달 방법? (1)
 이전글 모바일 LG기종 ajax 세션 만료 문제

댓글

kaido / 2014/12/12 14:44:06 / 추천 0
<script type="text/javascript">
     $("input[name=chkradio]").on('change', function(){
      $.ajax({
       type : "POST",
       data : 
       {
        treatstatus : $("input[name=chkradio]:checked").val() 
       },
       dataType: "html",
       url : '/admin1/affiliate_ajax_proc',
       success : function(msg)
       {
        
        alert(msg);
       }
       ,beforeSend:function(){
        $('.wrap-loading').removeClass('display-none').fadeIn("slow");
       }
       ,complete:function(){
        $('.wrap-loading').addClass('display-none').fadeOut("slow");
       }
      });     });
    </script>

localhost / 2014/12/12 14:48:47 / 추천 0
글 쓰고 보니 잘못 표기한 부분이 있네요. 이 부분은 그냥 테스트 겸 적어본거네요 ^^

alert(msg);

여기 대신 어떻게 해야될지 잘 모르겠습니다. 
kaido / 2014/12/12 15:00:20 / 추천 0
거기서 부터는 jquery 영역입니다.

ajax view 부분에서 json 이나 xml 이나 html 타입으로 값을 가져 왔다면

alert(); 에서 해당 값들이 보일 것입니다.

html 타입으로 하셨으니 view 부분을 html 태그로 완성해서 가져오셨겠군요.

그러면 간단합니다.
 
<table>
<tr id='table_tr'>
// 추가될 영역
</tr>
</table>


.... 생략

alert(); 대신에

$('#table_tr').append(msg);


msg의 데이터가 <td>....내용....</td>

이런 식이라면 바로 해결될 것입니다.



조금더 정밀한 컨트롤을 원하시면 json 형태로 받아와서 처리 하시면 됩니다.
그려넣는 방법은 거의 같습니다.



 
localhost / 2014/12/12 15:15:01 / 추천 0
kaido // 감사합니다. 

제가 글 재주가 부족하여.. 안되는 부분을 잘 설명하지를 못하고 있네요. 

alert이나 append로 해보았지만 값이 나오질 않네요. 

일단 view에서 라디오 체크를 하면 controll에서 받고 
controll에서 다시 모델을 호출하는데 controller에서 받은 값 ..그러니까 모델에서 
where절에 들어갈 1~4와 같은 값을 넣어 각각의 리스트를 보여주고자 합니다. 

일단 
1. 호출한 모델에서 $treatstatus = $this->input->post('treatstatus'); controll에서 넘겨준 값을 받는게 맞는건지? 
2. 맞다면 다시 모델에서 controller로 값을 보내줘야 되는데.. 원래 controller에서 ajax를 처리해주는 controller를 따로 만들었는데 어떻게 모델에서 받은 값을 다시 원래 controller로 넘겨주는지..(view 호출 할 때 뒤에 $data 와 같이 넘겨주는걸로 알고 있습니다만..)

가 궁금합니다. 




필력이 부족하다는걸 또 다시 느끼네요 ^^;;
일단은 하드코딩으로 모델 4개를 만들어서 라디오 버튼 클릭 할 때 마다 hide() show()로 보여지게 끔은 ..이게 하드코딩이라는거 같지만..아무튼 해결은 했습니다만 
100% 해결은 아닌 듯하여 다시 질문 올립니다. 
kaido / 2014/12/12 15:24:48 / 추천 0
이렇게 생각 하시면 됩니다.

ajax 호출단 ---> post 값 전송 --> ajax cont 에서 post 값을 가져옴. --> ajax cont 에서 model로 넘겨줌.

여기 까지는 맞습니다.

그리고 ajax model에서의 배열 값은 바로 가져오지 못합니다.

이건 ajax 자체가 그렇습니다. 딱히 ci 가 이상한게 아닙니다.


현재 타입을 html 타입으로 적어 놓으셨죠?

그럼 ajax model에서 조회한 값은 어떻게 가져 오냐구요?

그냥 ajax cont 에 view 파일을 로드 해서 거기에 넣고 싶으신 태그를 그리시면 됩니다.


ajax는 조회한 데이터 값을 가져가는게 아니라... view 파일에 출력된 값을 가져 갑니다.

이건 json 이든 xml 이든 text 이든 html 타입이든 전부 동일 합니다.


function affiliate_ajax_proc()
{
 echo $treatstatus = $this->input->post('treatstatus', true);
 
}

이렇게 해보시면 명확하게 이해 하실 것입니다.
 
localhost / 2014/12/12 15:42:45 / 추천 0
kaido 
잘 이해했습니다. 일단 컨트롤러에서
 

   foreach ($query -> result_array()  as $row)
   {
                   echo "<br>";
                echo "<div class='col-xs-12 col-sm-12 col-md-6 col-lg-6'>";
                echo "<div class='form-group'>";
                echo "<label class='col-xs-4 col-sm-4 col-md-3 control-label' for='form-field-1'> 상호 </label>";
                echo "<div class='col-xs-8 col-sm-8 col-md-6'>";
                echo "<input type='text' id='form-field-1' value='$row[BizName]'  class='col-md-12 col-sm-12 col-xs-12' />";
localhost / 2014/12/12 15:44:36 / 추천 0
위와 같이 직접 넣어줘서 처리 했습니다. 감사합니다.