我有一个carro表,该表与marcamodelo有关系,而这两个也有关系。我先添加一个marca,然后添加一个新的modelo之前,我必须先选择一个marca。

现在,要添加新的carro,我必须选择一个marca和modelo。当前所有已注册的modelo都已列出,但是我需要列出与所选marca相关的那些。以下是这些字段的select HTML。

<div class="row">
    <input id="hdn_id_marca" type="hidden" name="hdn_id_marca" value="0"/>
    <div class="form-group col-md-6">
        <label for="id_marca">Marca do Carro</label>
        <select id="id_marca" name="id_marca" class="form-control" required>
            <option value="" selected disabled>Selecione</option>
            <?php foreach ($marcas as $m) { ?>
                <option value="<?php echo $m['id']; ?>">
                    <?php echo $m['nome_marca']; ?>
                </option>
            <?php } ?>
        </select>
    </div>
    <div class="form-group col-md-6">
        <label for="id_modelo">Modelo do Carro</label>
        <select id="id_modelo" name="id_modelo" class="form-control" required>
            <option value="" selected disabled>Selecione</option>
            <?php foreach ($modelos as $m) { ?>
                <option value="<?php echo $m['id']; ?>">
                    <?php echo $m['nome_modelo']; ?>
                </option>
            <?php } ?>
        </select>
    </div>
</div>


这些值是从数据库中检索的,它不是任何静态值。我试图创建一个Ajax:

$('#id_marca').change(function() {
    var selectedId = $(this).find('option:selected').val();
    $('#hdn_id_marca').attr('value', selectedId);

    $.ajax({
        url: '/admin/modelos/select_by_id_marca',
        data: {'hdn_id_marca': selectedId},
        type: 'POST',
        success: function() {
            alert(data)
        }
    });
});


但后来我明白了


  POST XHR http://localhost:8000/admin/modelos/select_by_id_marca [HTTP / 1.1 500内部服务器错误53ms]


编辑2

下面是我的select_by_id_marca()方法。我还通过添加此方法假定可以访问的hidden字段来更新了先前的代码。经过一些更改后,我修复了发生500错误的原因,但是现在,根据所选的marca,该字段不再仅使用modelo填充。

public function select_by_id_marca()
{
    $data = array();

    $this->db->order_by($this->primary_key, 'DESC');
    $this->db->get_where('marca', array('id' => $this->input->post('hdn_id_marca')));
    $query = $this->db->get('marca');

    foreach ($query->result_array() as $row) {
        $data[] = $row;
    }

    $query->free_result();

    return $data;
}

最佳答案

这是错的

$this->db->order_by($this->primary_key, 'DESC');
$this->db->get_where('marca', array('id' => $this->input->post('hdn_id_marca')));
$query = $this->db->get('marca');


您同时使用get_where()get()。它应该是

$this->db->order_by($this->primary_key, 'DESC');
$query = $this->db->get_where('marca', array('id' => $this->input->post('hdn_id_marca')));


下一个,

更改

return $data;




echo json_encode($data);


为了获得成功,

success: function(data) {
    var a = JSON.parse(data);
    alert(a.id);
}

10-04 20:29