Как обрабатывать 2 запроса ajax в одном php файле?

Можно ли сделать обработку двух ajax запросов на одном файле обработчике? Сейчас для селектов я использую два файла, которые одинаковые по коду.

До этого, когда я отправлял запросы (В какой кабинет) на один php-файл, второй селект не отображал вообще кабинеты. То есть тегов option не было.

Есть форма, которая подставляет значение селекта в зависимости от выбранного здания

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

        <p>Откуда</p>
        <select name="building_from" id="building_id_from">
            <?php 
                foreach($buildings as $item) {
            ?>
            <option value="<?php echo $item[0]; ?>"><?php echo $item[1]; ?></option>
            <?php
                };
            ?>
        </select>

        <p>От какого кабинета</p>
        <select name="cabinet_from" id="cabinet_id_from">
            <?php 
                $offices = mysqli_query($connect, "SELECT * FROM `building_offices` WHERE `building_ID` = 1" );
                while($office_from = mysqli_fetch_assoc($offices)){
            ?>
            <option value="<?php echo $office_from['number']; ?>">к.<?php echo $office_from['number']; ?> | <?php echo $office_from['name']; ?> </option>
            <?php
                };
            ?>
        </select>

        <p>Куда</p>
        <select name="building_to" id="building_id_to">
            <?php 
                foreach($buildings as $item) {
            ?>
            <option value="<?php echo $item[0]; ?>"><?php echo $item[1]; ?></option>
            <?php
                };
            ?>
        </select>

        <p>В какой кабинет</p>
        <select name="cabinet_to" id="cabinet_id_to">
            <?php
                $offices = mysqli_query($connect, "SELECT * FROM `building_offices` WHERE `building_ID` = 1" );
                while($office_to = mysqli_fetch_assoc($offices)){
            ?>
            <option value="<?php echo $office_to['number']; ?>">к.<?php echo $office_to['number']; ?> | <?php echo $office_to['name']; ?> </option>
            <?php 
                };
            ?>
        </select>
        <br>
        <button type="submit">Построить маршрут</button>

    </form>

Селекты с выбором кабинетов обрабатываются такими ajax:

<script type="text/javascript">
        $(document).ready(function(){
            $( "#building_id_from" ).change(function() {
                var value1 = $(this).val();
                $.ajax({
                    url: "./navigation/fetch_from.php",
                    method: "POST",
                    data: {request: value1},
                    beforeSend: function() {
                        $("#cabinet_id_from").html("<span>Загрузка</span>");
                    },
                    success: function(data) {
                        $("#cabinet_id_from").html(data);
                    }
                });
            });
        });
        $(document).ready(function(){
            $( "#building_id_to" ).change(function() {
                var value2 = $(this).val();
                $.ajax({
                    url: "./navigation/fetch_to.php",
                    method: "POST",
                    data: {request: value2},
                    beforeSend: function() {
                        $("#cabinet_id_to").html("<span>Загрузка</span>");
                    },
                    success: function(data) {
                        $("#cabinet_id_to").html(data);
                    }
                });
            });
        });
    </script>

Обработчики запросов выглядят одинаково (файлы fetch_to.php и fetch_from.php):

<?php
    require_once '../config/connect.php';
    if(isset($_POST['request'])) {
        $request = $_POST['request'];
        $result = mysqli_query($connect, "SELECT * FROM `building_offices` WHERE `building_ID` = '$request'");
        while($item = mysqli_fetch_assoc($result)){
?>
    <option value="<?php echo $item['number']; ?>">к.<?php echo $item['number']; ?> | <?php echo $item['name']; ?> </option>
<?php
        }
    } 
?>

UPD

Я либо был уставшим, либо кэш не сбрасывался должным образом. Действительно селекты обрабатываются, если в ajax запросах указывать путь на один файл обработчик.


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

Автор решения: Stepan Turbasov

Я либо был уставшим, либо кэш не сбрасывался должным образом. Действительно селекты обрабатываются, если в ajax запросах указывать путь на один файл обработчик.

В данном случае, мой вопрос более не актуален, что-бы работало в одном файле, в ajax запросах нужно указать путь на единственный файл.

Итого ajax запросы будут следующими (url одинаковый)

<script type="text/javascript">
        $(document).ready(function(){
            $( "#building_id_from" ).change(function() {
                var value1 = $(this).val();
                $.ajax({
                    url: "./navigation/fetch.php",
                    method: "POST",
                    data: {request: value1},
                    beforeSend: function() {
                        $("#cabinet_id_from").html("<span>Загрузка</span>");
                    },
                    success: function(data) {
                        $("#cabinet_id_from").html(data);
                    }
                });
            });
        });
        $(document).ready(function(){
            $( "#building_id_to" ).change(function() {
                var value2 = $(this).val();
                $.ajax({
                    url: "./navigation/fetch.php",
                    method: "POST",
                    data: {request: value2},
                    beforeSend: function() {
                        $("#cabinet_id_to").html("<span>Загрузка</span>");
                    },
                    success: function(data) {
                        $("#cabinet_id_to").html(data);
                    }
                });
            });
        });
    </script>
→ Ссылка