У меня есть сайт, показывающий продукты, и когда вы нажимаете на продукт, вы получаете информацию о продукте. Теперь каждый продукт имеет несколько разных моделей, которые все хранятся в базе данных. Поэтому, когда вы выбираете опцию в 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> 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>
Не зная, что происходит с ошибками "его перепутали", сложно понять, в чем проблема... однако, с первого взгляда ваша функция 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
}
?>