2013-10-13 3 views
0

codeigniter에서 ajax를 사용하여 내 데이터베이스에서 데이터를 가져 오려고하는데 작동하지 않습니다. 내 모델 함수에 grade_id를 전달하면 문제가 발생한다고 생각합니다.codeigniter에서 AJAX를 사용하여 데이터베이스에서 데이터 가져 오기

AJAX :

<script type="text/javascript"> 
    $(document).ready(function(){  
     $('#grades').change(function(){   
      $("#classes > option").remove(); 
      var grade_id = $('#grades').val(); 
      $.ajax({ 
       type: "POST", 
       url: "<?php echo base_url(); ?>index.php/login/get_classes/"+grade_id, 
       data: {gradeid:grade_id}, 
       success: function(classes) 
       { 
        $.each(classes,function(id,name) 
        { 
         var opt = $('<option />'); 
         opt.val(id); 
         opt.text(name); 
         $('#classes').append(opt); 
        }); 
       }   
      }); 

     }); 
    }); 
</script> 

CONTROLLER :

function get_classes($gradeid) 
{ 
    $this->load->model('school_info_model'); 
    header('Content-type: application/json'); 

    if ($query = $this->school_info_model->get_all_classes($gradeid)) 
    { 
     echo json_encode($query); 
    } else { 
     redirect('login/loginform'); 
    } 

} 

MODEL :

function get_all_classes($gradeid) 
{ 

    $this->db->where('grade_id', $gradeid); 

    $query = $this->db->get('classes'); 

    if($query->result()){ 
     $result = $query->result(); 

     foreach($result as $row) 
     { 
      $options[$row->id] = $row->name; 
     } 
     return $options; 
    } 
} 

EDIT :

나는 2 가지를 제외하고는 현재 작동 중입니다. 오류가 계속 발생합니다.

A PHP Error was encountered

Severity: Warning

Message: Invalid argument supplied for foreach()

Filename: helpers/form_helper.php

Line Number: 331

내가 처음 페이지를로드 할 때 그것은 단지 성적 값이 변경 될 경우 AJAX를 활성화하기 때문에 클래스에 대한 입력 필드는 비어 :

ERROR .

function get_classes() 
{ 
    $this->load->model('school_info_model'); 

    if ($gradeid = $this->input->post('gradeid') 
    { 
     $query = $this->school_info_model->get_all_classes($gradeid); 
     header('Content-Type: application/json'); 
     echo json_encode($query); 
    } else { 
     redirect('some/controller'); 
    } 

} 

그리고 나는이 같은 일을 내 JS를 바꿀 것 :

<script type="text/javascript">// <![CDATA[ 
    $(document).ready(function(){  
     $('#grades').change(function(){ 
      $("#classes > option").remove(); 
      var grade_id = $('#grades').val(); 
      $.ajax({ 
       type: "POST", 
       url: "<?php echo base_url(); ?>index.php/login/get_classes/", 
       data: {gradeid:grade_id}, 
       success: function(classes) 
       { 
        $.each(classes,function(id,name) 
        { 
         var opt = $('<option />'); 
         opt.val(id); 
         opt.text(name); 
         $('#classes').append(opt); 
        }); 
       }   
      }); 

     }); 
    }); 
    // ]]> 
</script> 

난 당신이 원하는 곳이 정확히 잘 모르겠어요 내가 이렇게 내 컨트롤러를 설정합니다

+1

어떤 오류가 발생합니까? – WebNovice

답변

1

그래도 될 수는있어.

+0

사실, CI 컨트롤러에서 데이터를 반환하는 것은 * 작동하지 않습니다 *. Echoing은 CI 컨트롤러의 뷰 버퍼링 및 최종 출력 필터링을 우회하지만 잘 작동합니다. 질문에서 json_encode가 가장 가능성이 높습니다. FALSE – Filou

+0

맞습니다 ... 에코해야합니다 ... 잊어 버렸습니다. 한 번에 많은 것을 생각하고 있습니다. 나는 대답을 업데이트 할 것이다. – kevindeleon

1

매개 변수로 컨트롤러에 전달하는 대신 값을 직렬화하여 ur 스크립트에서 사용하십시오.

var grade_id = $("#grades").serialize(); 

data: grade_id 

그리고 컨트롤러에

,

$grade_id = $this->input->post('grade_id'); 

이 작동합니다!

1

첫 번째 장소에서 결과 본문을 가져 오지 않으면 json_encode은 단지 FALSE를 반환 할 가능성이 큽니다.

그냥 지적, 당신은

if($gradeid = NULL){ 
    $this->db->where('grade_id', $gradeid); 
} 

편집 중입니다 ... 잠시만 기다려, MHM, 과제 테스트 스타일이 나를 혼란 모델의 함수의 첫 번째 경우 절에서 비교 오류가 있습니다. 즉,이 where 절은 절대로 실행되지 않습니다.

이론적으로 (응용 프로그램을 알지 못하는 것처럼) 컨트롤러에서 클래스가 발견되지 않으면 빈 $options 목록을 반환하는 것이 좋습니다.

AJAX 호출이 JSON 데이터를 필요로하지 않는다고 명시하지만 도움이 될 수도 있습니다. 즉, dataType: "JSON"을 설정으로 추가하십시오.

양식에 대한 응답으로 편집 오류 : 당신이 얻는 오류는 기본적으로 foreach 루프가 잘못된 인수를 얻는다 고 말하는 표준 PHP 오류입니다. 아마 배열을 전달하지 않을 가능성이 있습니다. 이를 위해서는 각각 login/loginform을 확인해야합니다. 그러나 귀하의 의도가 무엇인지 확신 할 수 없습니까? 사용자가 예상 된 데이터를받지 못하면 로그인 양식으로 전달 하시겠습니까? 당신은 AJAX 요청에 그것을 다루고 있습니까? 지금은 AJAX 요청이 유효한 JSON이 아닌 것으로 변경되지만 브라우저의 위치는 변경되지 않습니다.

0

배열에 $ option을 정의해야합니다.

function get_all_classes($gradeid) 
{ 
$this->db->where('grade_id', $gradeid); 

$query = $this->db->get('classes'); 

$options = array(); 

if($query->result()){ 
    $result = $query->result(); 

    foreach($result as $row) 
    { 
     $options[$row->id] = $row->name; 
    } 
    return $options; 
    } 
} 
관련 문제