сделать вызов ajax в дизайне материала с использованием Codeigniter

Здесь я использую материал design lite для создания проекта, следуя тому, что я сделал свой код, как этот, но в соответствующем поле ничего не отображается.
Вот мой код, пожалуйста, посмотрите

<script>
$('#type').change(function(){
var type=$('#type').val();
alert(type);
var url='<?php echo base_url(); ?>admin/vehicle/ajax_vehicle';
alert(url);
$.post(url, {type:type}, function(data)
{
alert();
componentHandler.upgradeDom();
$('#vehicle').html(data);
});
});
</script>

Вот мой контроллер

public function ajax_vehicle()
{
$data['vehicle']=$this->Vehicle_model->view_available_vehicles($_POST['type']);
//var_dump($data['vehicle']);
$this->load->view('admin/vehicle/ajax_vehicle',$data);
}

Вот моя страница просмотра

<div class="input-field col s12">
<select  required name="vehicle_id" id="vehicle">
<option value=""  selected>Select</option></select>
<label>Select Vehicle</label>
</div>

var type=$('#type').val(); получает значение.
Когда я утешаю его, я получаю такой результат

 <select  required name="vehicle_id">
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
</select>

Это мой ajax_vehicle, необходимо отображать его содержимое после выбора выбранного типа.

<select  required name="vehicle_id">
<option value="">Select</option>
<?php  if(empty($assign_vehicle_info)){
if (!empty($vehicle)) {
foreach ($vehicle as $veh) {?>
<option value="<?= $veh->id ?>"<?php if (!empty($assign_vehicle_info)) { echo $assign_vehicle_info->vehicle_id == $veh->id ? 'selected' : ''; } ?>><?= $veh->name ?></option>
<?php }}}?>
</select>

на самом деле не знаю, какие дополнительные вещи должны быть добавлены к этому для работы.

-2

Решение

если data содержит

<select  required name="vehicle_id">
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
</select>

как вы заявляете, то результат $('#vehicle').html(data); будет

<select  required name="vehicle_id" id="vehicle">
<select  required name="vehicle_id">
<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>
</select>
</select>

который, как вы можете видеть, является бессмысленным и недействительным HTML. html() функция заменяет внутренний HTML-код выбранного элемента, а не самого элемента.

У вас есть два варианта:

1) Измените выходные данные сервера (т.е. ajax_vehicle вид) так что просто возвращает <option> элементы — нет необходимости возвращать внешнюю часть <select> также. Поэтому в результате data возвращаемый из вызова ajax должен содержать только (например):

<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>

Тогда вы можете продолжать использовать $('#vehicle').html(data); как прежде.

ИЛИ ЖЕ

2) Использование replaceWithт.е. $("#vehicle").replaceWith(data); вместо .html(), Но в этом случае вам все равно нужно изменить вывод вашего сервера так, чтобы <select> включает в себя id="vehicle" разметка, иначе этот код не будет работать во второй раз, так как элемент с именем «vehicle» больше не будет существовать. Также имейте в виду, что если у вас есть какие-либо обработчики событий и т. Д. Для элемента «vehicle», их также нужно будет создать заново, поскольку вы заменили весь элемент. Увидеть http://api.jquery.com/replacewith/

На мой взгляд, вариант 1 — лучший выбор.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]