Code Igniter php - возвращает (ajax?) Данные на основе выпадающего списка с помощью JQuery - PullRequest
3 голосов
/ 01 июня 2011

Я хочу сгенерировать некоторые данные для редактирования, отфильтрованные по выбору пользователя в выпадающем меню, но я не хочу усложнять ситуацию.

У меня уже есть проект, запрашивающий базу данных для списка "деревьев", и заполняющий выпадающий список с именем дерева, назначая tree_id в качестве его значения.

Все, что я хочу сделать, - это когда пользователь делает выбор в раскрывающемся списке, чтобы JQuery возвращал список только соответствующих данных этого идентификатора (описание и т. Д.).

Какой самый простой способ сделать это? Мне даже нужно сделать запрос AJAX? Вот мой код:

CONTROLLER:

$this->load->model('Model_form','', TRUE);
$data['trees'] = $this->Model_form->get_tree();
$this->load->view('view_form_tree', $data);

Модель:

function get_tree(){
$query = $this->db->query('SELECT * FROM trees');
return $query->result();
}

ВИД:

<h1>Edit Tree</h1>
<select id="f_treeindex" name="f_treeindex" class="dd_black">
<option value=""></option>
<?php
foreach($trees as $tree){
    echo '<option value="' . $tree->id . '">' . $tree->tree_name . '</option>';
}
?>
</select>

<script type="text/javascript">
     $(document).ready(function() {
        $('#f_treeindex').change(function(){
            var tree_id = $('#f_treeindex').val();
            if (tree_id != ""){
                //DO WHATEVER I NEED TO DO TO CALL THE INFORMATION FOR THE TREE WHOSE ID MATCHES THAT SELECTED IN THE DROPDOWN
            }//end if
        }); //end change
     }); //end docready
</script>

Просто обратите внимание, что оператор SELECT * в модели будет возвращать tree_id, tree_name и tree_description.

1 Ответ

4 голосов
/ 01 июня 2011

Если вы создадите метод контроллера 'show', который возвращает пустой шаблон с данными (то есть: не с полным макетом), вы можете сделать что-то вроде этого:

$('#f_treeindex').change(function(){
    var tree_id = $('#f_treeindex').val();
    if (tree_id != ""){
        $.get('/controller_name/show', {id:tree_id}, function(data){
            $(this).parents('div').append(data);
        })
    }//end if
});

Обернуть <select> в <div>, поэтому в вашем jquery есть что-то, к чему можно добавить полученный html.

Кроме того, я бы переименовал get_tree () в get_trees (), так что вы также можете сделать get_tree ($ id)возвращает единственное дерево в вашем методе controller_name # show, которое можно добавить в шаблон без макета для добавления.

function show() {
    $this->load->model('Model_form','', TRUE);
    $data['tree'] = $this->Model_form->get_tree($this->params['id']);
    $this->load->view('single_tree_view', $data);
}

также, не на 100% уверены, как настроен ваш CI, поэтому ваш$.get строка, возможно, должна быть

$.get('/controller_name/show/'+tree_id, function(data){...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...