Как создать связанные select?

Добрый день!

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

Ajax только недавно начал изучать, нашел похожий пример - вот html
<div class="form-group">
     <label class="col-md-2 control-label">Категория:</label>
           <div class="col-md-10">
                <select onchange="javascript:selectCategory();" name="category_id" id="category_id"  class="form-control">
		    <?php if (is_array($categoriesList)): ?>
		     <?php foreach ($categoriesList as $category): ?>
		         <option value="<?php echo $category['id']; ?>"> <?php echo $category['name']; ?></option>
		     <?php endforeach; ?>
		    <?php endif; ?>
		</select>
           </div>
</div>
														
<div  class="form-group">
    <label class="col-md-2 control-label">Подкатегория: </label>
    <div name="selectCategory" class="col-md-10">
     </div>
</div>


При выборе категории срабатывает скрипт
function selectCategory(){
        var category_id = $('select[name="category_id"]').val();
        if(!category_id){
                $('div[name="selectCategory"]').html('');
                
        }else{
                $.ajax({
                        type: "POST",
                        url: "/ajax.base.php",
                        data: { action: 'showRegionForInsert', category_id: category_id },
                        cache: false,
                        success: function(responce){ $('div[name="selectCategory"]').html(responce); }
                });
        };
};


Он вызывает вот этот файл
switch ($_POST['action']){
                
        case "showRegionForInsert":
                echo '<select name="pod_category_id" id="pod_category_id"  class="form-control">';
				$ListPodCategories = Category::PodCategoriesListAll($_POST['$category_id']);
              
				
                foreach ($ListPodCategories as $listCateg) {
                        echo '<option value="'.$listCateg['id'].'">'.$listCateg['name'].'</option>';
                };
                echo '</select>';
                break;
                
               
};


Select вроде начал появляться, но он пустой. Запрос для подкатегорий в других местах работает, так что проблема не в нем. Помогите, пожалуйста.
  • Вопрос задан
  • 1458 просмотров
Решения вопроса 1
@kamenevn
в ajax.base.php
не нужно возвращать html, нужно вернуть в ответ в формате json

foreach ($ListPodCategories as $listCateg) {
                        echo '<option value="'.$listCateg['id'].'">'.$listCateg['name'].'</option>';
                };


Переделать в
$result = ['data'];
foreach ($ListPodCategories as $listCateg) {
$result['data'][] = [
'id' => $listCateg['id'],
'name' => $listCateg['name']
];
}

и ответ возвращаешь в json
echo json_encode($result);

на js делаешь
не
$('div[name="selectCategory"]').html(responce);
а примерно так:
Если IE8 не нужен, то
$('div[name="selectCategory"]').empty();
$.each(response.data, function(key, value) {
$('div[name="selectCategory"]').append(new Option(value.name, value.key));
}

Если нужен, то примерно так:
$('div[name="selectCategory"]').empty();
$.each(response.data, function(key, value) {   
     $('#mySelect')
         .append($("<option></option>")
                    .attr("value", value.id)
                    .text(value.name)); 
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Daemon23RUS
@Daemon23RUS
в начало файла ajax.base.php добавьте
<?php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы