2013-10-13 104 views
0

我想從我的數據庫中獲取數據到我的視圖在codeigniter中使用ajax,但我無法讓它工作。我認爲將grade_id傳遞給我的模型函數會出現問題。從代碼數據庫中使用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> 

控制器:

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; 
    } 
} 

編輯:

我更新了我的代碼現在正在工作,除了2件事情,我不斷收到一個錯誤。

錯誤:

A PHP Error was encountered

Severity: Warning

Message: Invalid argument supplied for foreach()

Filename: helpers/form_helper.php

Line Number: 331

,當我加載頁面,第一次上課的輸入欄是空的,因爲它只能激活AJAX如果等級變化的值。

+1

它返回什麼錯誤? – WebNovice

回答

1

我會爲我設置控制器像這樣:

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> 

我不知道如果這正是你想要是的,但它應該讓你更接近。

+0

實際上,在CI控制器中返回數據不會*工作。回聲應該工作得很好,但它會繞過CI控制器的視圖緩衝和最終輸出過濾。最有可能的問題json_encode只是返回FALSE – Filou

+0

你是對的...它應該是回聲...忘了這一點。一次想到很多事情。我會更新答案。 – kevindeleon

1

而不是將它作爲參數傳遞給您的控制器,嘗試序列化值並在腳本中使用它。

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,你的任務測試風格困惑我的第一個if子句中的比較錯誤。我的意思是,這個where子句永遠不會被執行。

此外,如果在您的控制器中找不到類,那麼您可以考慮返回空的$options列表,這在理論上(不知道您的應用程序)是否合理。

明確告訴你的AJAX調用它可能並不需要JSON數據,但可能會有所幫助,例如添加dataType: "JSON"作爲設置。

編輯迴應您的表單錯誤: 您收到的錯誤是一個標準的PHP錯誤,基本上說,foreach循環得到一個錯誤的參數..可能你不會傳遞它一個數組。爲此,您必須分別檢查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; 
    } 
} 
相關問題