Все ближе к ответу 2 select option из Mysql. Ajax

2 зависимых списка.

Почти дошел до ответа путем множества дней проб и ошибок и хейта со стороны некоторых пользователей SO, но до сих пор не вижу где ошибка.

2 таблицы.

Таблица mark и поля id, title (названия марок, например Audi).

Таблица model и поля id, mark_id (сопоставление с id из таблицы mark) и title (названия моделей например A7)

Все марки из БД выводятся, а вот список моделей не подгружается, select просто пишет "Нет моделей"

Запрос к бд идет через RedBean php.

$marks = R::findAll('mark', 'ORDER BY title ASC');

Зависимый список.

<form action="search" name="search"  method="POST" id="search" >
  


<select class="select2" name="mark" id="mark" required>
    <option value="0" disabled selected>Выберите марку</option>
    <?php if (isset($marks)): ?>
        <?php foreach ($marks as $mark): ?>
             <option value="<?=$mark['id']; ?>"><?=$mark['title']; ?></option>
        <?php endforeach; ?>
     <?php endif; ?>
</select>




<select class="select2" name="model" id="model" required disabled>
   <option value="0" disabled selected>Модель</option>  
</select>

  

</form>

Ajax.

<script>
   function getModel(parent, mark, model, create=0) {
        $(parent).on('change',mark, function () {
            var mark_id = $(mark).val();
            $.ajax({
              url: 'fetch_data.php',
                data: {
                    mark_id: mark_id,
                    create: create,
                },

                type: 'POST',
              method: 'POST',
                dataType: 'html',
                success: function (res) {
                    if (res) {
                        $(model).empty().html(res);
                    } else {
                        $(model).empty().html('<option>Нет моделей</option>');
                    }
                },
                error: function () {
                    alert('Ошибка');
                }
            });
        });
    }


     /* Получение моделей авто в быстром поиске */
    getModel('#search', '#mark', '#model');



</script>

fetch_data.php

if ($_POST['mark']) {
    

$model = R::getAssoc('SELECT model.id, model.title AS model,mark.title AS mark
 FROM model
   INNER JOIN mark
    ON model.mark_id = mark.id');

    print json_encode($model);
}


print_r($model);

Выводит массив связанных марок-моделей. Почему он до сих пор не вносит их в select не понимаю...

Вот вид вывода массива.


[1] => Array
        (
            [model] => CL
            [mark] => Acura
        )

[2] => Array
        (
            [model] => EL
            [mark] => Acura
        )

[3] => Array
        (
            [model] => Integra
            [mark] => Acura
        )

Резюмируя вопрос, список марок загружается из Базы данных в select, а вот модели нет.

Коллеги, помогите пожалуйста.


Ответы (1 шт):

Автор решения: romanown

надеюсь, что за это время автор уже нашел решение. но если нет, то как минимум передаются одни поля, а проверяется совсем другое. или я не заметил код, где это преобразуется. то есть изначально нет шансов получить правильный ответ. отправляются mark_id и create принимается mark

$.ajax({
              url: 'fetch_data.php',
                data: {
                    mark_id: mark_id,
                    create: create,
                },

if ($_POST['mark'])

так же не заметил что в запрос передается переменная для выбора нужных строк. в таком запросе должно отдавать содержимое всей таблицы. для автора и всех начинающих, которые сталкиваются с подобными проблемами и найдут этот вопрос небольшое отступление от прямого ответа на вопрос. для разделения проблемы полезно просто в браузере в инструментах разработчика посмотреть что и куда отдает клиентская часть и так же сделать переход по предполагаемоиму адресу php функции и увидеть что вообще отдается. там же можно заменить запрос с GET на POST и подставляя свои данные, имитировать работу AJAX, передавая предполагаемые данные. таким образом будут протестированы обе составляющие процесса и видно их взаимодействие.

→ Ссылка