Как обрабатывать 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 шт):
Я либо был уставшим, либо кэш не сбрасывался должным образом. Действительно селекты обрабатываются, если в 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>