извлечение информации из базы данных с помощью ajax и codeigniter и ее возврат

0

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

productdetail_view

<?php foreach($productsdetail as $row) { ?>
    <div class="container">
      <ol class="breadcrumb">
  <?php echo set_breadcrumb(); ?>
</ol>
 <div class="row">
 <div class="border clearfix">
  <div class="productContainer">
    <div class="productImg">
        <img class='voorbeeldimg' src="<?php echo base_url();?>uploads/<?php echo $row->foto;  ?>" alt="">
    </div>
    </div>
    <div class="test" id="test" style="height:200px; background-color:grey;"></div>
    <div class="productInfo">
    <h2>Nordia <?php echo $row->bestelnr; ?></h2>
    <h4><?php echo $row->naam; ?></h4>
    <p><?php echo $row->beschrijving; ?></p><br/>
        <label for="modellen">Modellen</label>
    <select  name="modellen" id="selection" class="form-control">
        <option value="600X400">600X400</option>
        <option value="700X500">700X500</option>
    </select><br/>
    <p><b>Draagvermogen:</b> <?php echo $row->draagvermogen; ?>kg</p>
    <p><b>Laadvlak:</b> <?php echo $row->laadvlak; ?>mm</p>
    <p><b>Wiel:</b> <?php echo $row->wiel; ?>mm</p>
    <p><b>Eigen gewicht:</b> <?php echo $row->gewicht; ?>kg</p>
    <p><b>Bestel nr: </b><?php echo $row->bestelnr; ?></p><br/>
    <label for="aantal">Aantal</label>
    <input type="number" class="form-control" id="aantal" placeholder="Stuks">
    <h3><?php echo $row->prijs; ?> €</h3>
    <h6>Excl 21% btw</h6>

<br/>
        <p><a href="" class="btn btn-default btn-lg"><span class="glyphicon glyphicon-plus-sign"></span>&nbsp;Winkelwagentje</a></p>
  </div>
  </div>
  </div>
      <br/>
</div> <!-- /container -->
  <?php } ?>

контроллер

function productdetail(){
        $data = array();
        $id = $this->uri->segment(5, 0);
        $data['productInfo'] = array();
        $this->load->model('Site_model');
        $title['title'] = 'Nordia - Steekkar';
        $data['productsdetail'] = $this->Site_model->get_productdetail($id);
        $this->load->view('head_view', $title);
        $this->load->view('nav_view');
        $this->load->view('productdetail_view',$data);
        $this->load->view('footer_view');
    }

    function modelopties(){
        $data = array();
        $where = array();
        $where['modellen'] = $this->input->post('modellen');
        $this->load->model('Site_model');
        $data['option'] = $this->Site_model->get_productoptions($where);
        $this->load->view('productdetail_view',$data);
    }

Модель

function get_productoptions($where) {
 return $this->db->where('laadvlak')->get('tblproducts')->row();

}

Аякса

<script>
    $(function(){
        $('#selection').change(function(){
             var modellen = $(this).val();
             $.ajax({
                url : 'site/modelopties',
                type : "POST",
                data : modellen,
                success : function(data){
                    $('#test').html(data);

                },
             }); 
        });
    }) 
    </script>
Теги:
codeigniter

1 ответ

0

Не зная, что происходит с ошибками "его перепутали", сложно понять, в чем проблема... однако, с первого взгляда ваша функция javascript неверна.

Взято с http://api.jquery.com/jQuery.ajax/

Параметр data может содержать либо строку запроса формы key1 = value1 & key2 = value2, либо объект формы {key1: 'value1', key2: 'value2'}.

На данный момент вы отправляете только значение modellen на контроллер/функцию site/modelopties и в результате $this->input->post('modellen') ищет в столбце массив, называемый 'modellen' (который его явно не найти).

Я бы порекомендовал изменить вашу функцию javascript ниже:

$('#selection').change(function(){
    var modellen = $(this).val();
    $.ajax({
        url : 'site/modelopties',
        type : "POST",
        data : { modellen: modellen }, // or modellen=modellen
        success : function(data){
            $('#test').html(data);

        },
    }); 
    return false; // Prevents page from reloading
});

Надеюсь, это поможет...

РЕДАКТИРОВАТЬ

Во-первых, обновите функцию javascript с возвратом false; так как это предотвратит перезагрузку страницы при изменении значения поля выбора.

Во-вторых, текущая функция javascript возвращает то, что выводится из функции контроллера modelopties (что в данном случае является представлением productdetail_view). Чтобы просто вернуть значения базы данных (не весь вид), вам нужно будет изменить свою функцию modelopties. Я бы предложил создать новое представление, которое отображает только ту часть представления, которую вы хотите загрузить, в div #test.

контроллер

<?php
function modelopties() {
    $data = array();
    $where = array();
    $where['modellen'] = $this->input->post('modellen');
    $this->load->model('Site_model');
    $data['option'] = $this->Site_model->get_productoptions($where);
    $this->load->view('productdetail_partial_view', $data); // new view file
}
?>

Просмотр (productdetail_view_partial)

<?php
foreach ($option as $row) {
    echo $row . '<br />'; // manipulate the data however you want it to be displayed
}
?>
  • 0
    Моя функция productdetail () сначала загружает productdetail_view. Но когда я изменяю selectbox, он загружает функции контроллера. Но проблема в том, что я хочу только вернуть значения из базы данных. не представление снова, потому что тогда это загружено в оригинальном представлении. ты понял ? :-)
  • 0
    Пожалуйста, смотрите отредактированный ответ выше.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню