根据在codeigniter中选择的上述选择框填充选择框

时间:2013-06-07 10:13:21

标签: php codeigniter-2

我是一个表单,其中状态在db中的选择框中填充,并且基于状态选择city必须在下面的选择框中填充。任何人都可以帮我解决这个问题,我怎样才能使用codeigniter.I尝试了ajax方式,但是它没有工作'undefined'。

function get_city(){
var state=$("#state").val();
var dataString = 's_id='+ state;
var url="<?php echo base_url()?>admin/home/get_city";


$.ajax({
    type:"POST",
    url:url,
    data:dataString,
    success:function(data){

       $("#city").html(data);
   }
});

}

控制器:

function get_city(){


    $this->load->model('data_model');
    $data['records']=$this->data_model->get_cities();

    return $data['records'];

}

型号:

    function get_cities(){

    $this->db->select('id','city');
    $this->db->from('cities');
    $this->db->where('s_id', $this->uri->segment(4));

    $query=$this->db->get();
    if($query->num_rows()>0){
        foreach($query->result() as $row){
            $data[]=$row;

        }
        return $data;
    }
}

我需要帮助

2 个答案:

答案 0 :(得分:0)

控制器

function get_city(){

    $this->load->model('data_model');
    $records = $this->data_model->get_cities();
    $city_html = '';
    foreach ($records as $row) {
     $city_html .= '<option value="'. $row['id'] .'">'. $row['city'] .'</option>'; 
    }
    echo $city_html;
    exit;

}

答案 1 :(得分:0)

对于这类事情,你实际上更好地使用JSON:

动作:

function get_cities() {
    // Load your model.
    $this->load->model('data_model');
    // Get the data.
    $cities = $this->data_model->get_cities();
    // Specify that we're returning JSON.
    header('content-type: application/json');
    // Return a JSON string with the cities in.
    return json_encode(array('Cities' => $cities));
}

使用Javascript:

$('#state').change(function()) {
    // Get an instance of the select, and it's value.
    var state = $(this),
        stateID = state.val();
    // Add if statement to check if the new state id
    // is different to the last to prevent loading the same
    // data again.

    // Do the Ajax request.
    $.ajax({
        url : '/path/to/get_cities', // Where to.
        dataType : 'json', // Return type.
        success : function(data) { // Success :)
            // Ensure we have data first.
            if(data && data.Cities) {
                // Remove all existing options first.
                state.find('option').remove();
                // Loop through each city in the returned array.
                for(var i = 0; i <= data.Cities.length; i++) {
                    // Add the city option.
                    state.append($('option').attr({
                        value : data.Cities[i].value
                    }).text(data.Cities[i].city));
                }
            }
        },
        error : function() {
            // Do something when an error happens?
        }
    });
});

上面的代码将简单地返回城市列表,作为JSON对象,即

{Cities:[{id:1,city:'London'},{id:2,city:'Paris'}]}

当jQuery获取它时,它会将其转换回一个数组,然后您可以通过data.Cities[0].city访问该数组,其中数据是jQuery成功回调返回的对象。

你“可以”将城市预处理成HTML并返回,但是不能在其他地方重复使用,所以你最好通过返回JSON使它变得可移植。

希望这会有所帮助:)