CI 묻고 답하기

제목 ajax로 조회 값 던진 걸, 목록에서 조회되게 처리하는 것이 문제가 있어 문의 드립니다.
카테고리 CI 2, 3
글쓴이 그동안 작성시각 2022/09/25 21:24:21
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 5362   RSS

안녕하세요! 혹시 아시는 분 계시면 댓글 좀 부탁 드립니다.

ajax로 조회 조건 값 던진걸... 모델 거친 후... 뷰에서 foreach ($profile_list as $lt)로 받을수는 없나요??

위 부분이 문제 인 것 같습니니다.

 

[문제점 및 결과]

목록에서 특정조건을 검색했는데, 목록화면은 이전 그대로이고 code 200 에러 alert이 뜹니다.

 

(성공확인) 1. 뷰 : 검색 버튼 클릭시 ajax로 컨트롤러로 검색조건 값 넘김.

(성공확인) 2. 컨트롤러 : 값 받아서 모델로 조회  함.

(성공확인) 3. 모델 : 조회 후 컨트롤러로 값 넘겨줌.

(여기부터 실패인듯) 4. 컨트롤러 : 모델 조회된 값 뷰로 넘김.

(이전화면 그대로 반응없음) 5. 뷰 : 받아서 반복문으로 뿌림.

 

2번을 더블 클릭하면, 브라우저 새창에 성공적으로 검색된 화면이 보여집니다.

 

[뷰 페이지]

<!------------------------------ 프로필 목록 -------------------------------->			
<?php
foreach ($profile_list as $lt)                                   
{
<!------------------------------ //프로필 목록 -------------------------------->

 

<!--- 필터.적용하기 버튼 클릭 시 ----->
<script>
$(document).on('click','#filter_search_btn',function()
{   
	//변수 정리  
	var work_type = $(".work_type:checked").map(function () { return this.value }).get().join();  

	$.ajax ({                                                     
	     	url : "/profile/profile_list",
	     	type : "POST",
	     	dataType : "json",
	     	data :  {
			          filter_search : 'y' ,
			          work_type : work_type ,
			},
	        success : function(result)                 
	        {
	            if (result = 1000) 
		        { 	                
	                alert("필터를 적용 했습니다.");
	                location.reload();
		        }                         				         
	        },
	        error : function(request,status,error)    
	        {
	            if(request.status)
		        {
		            alert("code:"+request.status+"\n"+"message:"+request.responseText);
		        }
		        else if(error)
		        {
		            alert("error:"+error);
		        }
	        }
	    });
	});
</script> 
<!---- 필터.적용하기 버튼 클릭 시  ---->

 

[컨트롤러]

public function profile_list()
{
    //변수정의
    $data = array(
         'work_type' => $this->input->post('work_type') ,                                               //근무방식
    );           

    //모델로 값을 넘겨서 조회 값을 받아와서,뷰로 넘김.
    $data['profile_list'] = $this->profile_m->profile_list_search($data);                                //파라미터 값을 넘김.
    $this->load->view('html/profile/profile_list_v', $data);                                               //뷰로 결과값 넘겨줌.

    $result = '1000';                                                                                            //ajax에 성공결과 알려주기 위해 임의로 만든 값.
    echo json_encode($result);                                                                               //ajax에 성공결과 알려줌.
}

 

 다음글 지역화 라우팅 관련해서 질문이 있습니다. (3)
 이전글 ci4 model에서 조인을 어떻게 하나요? (2)

댓글

kasumil / 2022/09/25 22:27:15 / 추천 0
아... 대충보고 답변했더니 ajax에서 console.log 찍으라고 했는데, 컨트롤러에서 데이터값을 이상하게 주는거였네요.
public function profile_list()
{
    //변수정의
    $data = array(
         'work_type' => $this->input->post('work_type') ,  
    );          

    // 뷰로 넘기는데 컨트롤러에 작성하신 방식이면 페이지 최초로딩에서나 뿌려집니다.
 // 반환을 하시는데, 페이지에 뿌리시니 새로고침을 하지 않는 이상 해당 값이 안보이죠.
//(새로고침하면 해당 값은 날라가니 소멸되구요)
// 해당 방식은 해당 페이지로 최초접속에서나 작동됩니다.
// ajax가 알 수 있도록 해당 값을 ajax한테 반환해주셔야 합니다.
    return json_encode($this->profile_m->profile_list_search($data));  
// 만약 안보이면 아래의 var_dump만 주석 풀어서 반환하세요.   
// echo var_dump('ajax return value');               
}

 

그리고 중대한 문제가 있는데, js에서 동적으로 유저와 action을 이용하여, php의 view에서 foreach 돌리시려고 하시는데, 이 방식이면 현재 안됩니다.

php를 form을 통한 post, get 방식이 아니라서 해당 방식 구현하실거면 불가능합니다.

 

위에서 제가 적은 답변은 js로 해당 응답값을 반환하고 해당 반환값을 js가 만들어주는 것입니다.

그런데, 작성자분이 생각하시는건 view에서 form 태그를 통한 액션을 주면 페이지 reload가 되면서 다시 페이에 get, post로 정보가 들어가고  그 정보를 해당 페이지 컨트롤러가 읽으면서 정보를 가져오고 $_GER, $_POST -> 모델에서 조회. -> 컨트롤러 반환 된 값을 view로 값을 반환해 해당 foreach로 뿌려주는 방식입니다.

ajax로는 이 방법이 작동되지 않습니다.

ajax는 js -> 컨트롤러 -> 모델 -> 컨트롤러 -> js로 반환하는 방식이라서요.

view는 가만히 있는데, js가 페이지 내 태그를 변경하는 방식이라 페이지 이동이 없습니다.
그동안 / 2022/09/26 08:42:13 / 추천 0
친절하게 답변주셔서 감사해요. 말씀하신대로 ajax로 보낸걸 js로 받아서 append로 화면에 보여주는 건 할줄 아는데, js코드가 긴것 같아서 ajax로 보내고 php단에서 foreach로 된다면 코드가 짧아질 것 같아서 삽질을 좀 했는데….

역시 ajax로 보낸건 ajax안에서 js로만 받을수 있군요 ㅠㅠ

그럼 코드를 바꿔봐야 겠네요. 그나마 적은걸로…쿨럭쿨럭;;
windforce / 2022/09/26 10:27:10 / 추천 0

저런 식으로 가능은 하겠는데..

1. 뷰페이지 컨트롤러에서 url에 필터값 파라미터가 있는 경우 $profile_list에 필터링한 데이터를 넣고 파라미터 없는 경우 그냥 조회하는 방식으로 작업

2. 검색시 데이터 있으면 1000 리턴

3. 1000리턴 받으면 location.reload();이 아닌 현재 주소의 뒤에 필터값을 파라미터로 붙인 url로 이동

이렇게 하면 필터링된 데이터가 나오겠죠