2015-12-17 6 views
0

У меня есть таблица carro, которая имеет отношения с marca и modelo, и эти два также имеют отношения. Я сначала добавляю marca, а затем при добавлении нового modelo, я должен выбрать marca.CodeIgniter 3 - Изменить значения выбора в зависимости от другого выбора

Теперь, чтобы добавить новый Carro, я должен выбрать одну Marca и Modelo. В настоящее время перечислены все зарегистрированные modelo, но мне нужно указать те, которые связаны с выбранными marca. Ниже приведен HTML-код select.

<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 Internal 53ms Ошибка сервера]

Edit 2

Ниже мой метод select_by_id_marca(). Я также обновил предыдущий код, добавив поле hidden, к которому этот метод должен иметь доступ. После некоторых изменений я исправил причину ошибки 500, но теперь поле не заполняется только modelo в соответствии с выбранными marca.

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

добавить лет Ур 'select_by_id_marca'. –

+0

Точно так же, как для обоев, для тех, кто задается вопросом: * carro * = * автомобиль *, * marca * = * make *, * modelo * = * модель *. – Hexaholic

+0

@ Hexaholic Вы имеете в виду, что он пытается использовать богатый модельный метод? :) .. mfgabriel92 вы можете отобразить свой код действия контроллера, который вы пытаетесь обогатить. – Svetoslav

ответ

0

Это неправильно

$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); 
} 
+0

Есть ли способ отлаживать его? Это не имело никакого значения, но все значения показаны. Может, я забыл что-то еще? – mfgabriel92

+0

Убрали ли вы 'get' или' get_where' ?? –

+0

Я сделал именно так, как вы сказали. – mfgabriel92

Смежные вопросы