Как обновить данные ajax
У меня есть БД с таблицей units, где содержится информация о людях.
У меня есть файл functions.php со множеством MySQL-запросов. Среди них есть запрос всех живых людей:
$sql5 = "SELECT * FROM `units` WHERE alive = 1";
$result5 = mysqli_query($database, $sql5);
$alives = mysqli_fetch_all($result5, MYSQLI_ASSOC);
Далее в файле index.php у меня через foreach выводятся все люди, внутри каждой строки передаются атрибуты для ajax (атрибутов много, но для удобства я оставил только несколько главных):
foreach($alives as $alive):?>
<span data-name='<?=$alive['name'];?>' data-family=<?=$alive['family'];?> data-firma=<?=$alive['firma'];?>'>
<?=$alive['name'].' '.$alive['family'].' '.$alive['age'].' лет.';?>
</span>
<? endforeach;?>
Далее есть файл js, где при клике на строку происходит ajax-запрос:
$.ajax({
type: "GET",
url: "obrabotka.php",
data: {name: this.dataset.name, family: this.dataset.family, firma: this.dataset.firma},
success: function(data) {
names.innerHTML = data.name;
families.innerHTML = data.family;
firmas.innerHTML = data.firma;
}
})
Собственно, сам файл-обработчик obrabotka.php:
$catalog = [
'name' => $_GET['name'],
'family' => $_GET['family'],
'firma' => $_GET['firma']
];
exit(json_encode($catalog));
И все это выводится в ДОПОЛНИТЕЛЬНОЕ (запомните это слово) окно:
<div class="unityear">
<span class="names"></span>
<span class="families"></span>
<span class="firmas"></span>
<div class="knopki">
<form action="unit.php" method="POST" class="form">
<input type="hidden" class="idi" name="id"></input>
<input type="submit" class="rezume" value="Нанять">
<input type="submit" class="uvolen" name="uvolen" id="uvolen" value="Уволить">
<input type="submit" class="school" value="Переучить">
</form>
</div>
</div>
<span class="populations"></span> // это не в ДОПОЛНИТЕЛЬНОМ окне, тут проблем нет
Тут, как вы заметили, есть кнопки. Пока что сделал только одну кнопку - уволить. Вот, что происходит в файле-обработчике unit.php, когда на нее нажимаешь:
if(isset($_POST["uvolen"])){ $user_id = $_POST['id'];
$_SESSION['id'] = $user_id;
// Запоминается фирма, в которой работал юнит
$sql404 = "SELECT * FROM `units` WHERE id = '$user_id'";
$result404 = mysqli_query($database, $sql404);
$this_user = mysqli_fetch_all($result404, MYSQLI_ASSOC);
$_SESSION['firma'] = $this_user[0]['firma'];
// Увольняем юнита
mysqli_query($database, "UPDATE `units` SET `firma` = 'Безработный' WHERE id = '$user_id'");
header('location: index.php'.$_SERVER['HTTP_REFERER']);
exit;
?>
При этом при нажатии на ту же кнопку в файле js выполняется ajax-запрос:
$('#uvolen').click (function(){
$.get(
'settings.php',
function(data){
$('#firma').text(data[0]); //фирма, где работает юнит
$('#populations').text(data[1]); // количество рабочих на фирме
},
"json");
}
Вот, что происходит при этом в файле-обработчике settings.php:
session_start();
$firma = $_SESSION['firma'];
$user_id = $_SESSION['id'];
// Вычисляется обновленная информация о количестве рабочих в здании
$sql405 = "SELECT * FROM `builds` WHERE slogan = '{$firma}'";
$result405 = mysqli_query($database, $sql405);
$this_build = mysqli_fetch_all($result405, MYSQLI_ASSOC);
$populations = $this_build[0]['populations'];
// Вычисляются новые данные о юните (фирма, занятость)
$sql404 = "SELECT * FROM `units` WHERE id = '$user_id'";
$result404 = mysqli_query($database, $sql404);
$this_user = mysqli_fetch_all($result404, MYSQLI_ASSOC);
$user_firma = $this_user[0]['firma'];
$data = array($user_firma, $populations);
echo json_encode($data);
И после этого в графе фирмы у юнита пишется "Безработный". В БД тоже происходят изменения на безработный.
Проблема в следующем. Когда я закрываю ДОПОЛНИТЕЛЬНОЕ окно и вновь нажимаю на строку юнита, вновь открывается ДОПОЛНИТЕЛЬНОЕ окно, но там старая информация, юнит опять работает на фирме. И только при обновлении страницы в ДОПОЛНИТЕЛЬНОМ окне юнит уже уволенный. Как сделать, чтобы так не происходило? Вариант с обновление страницы не подойдет. Старая информация, вероятно, хранится в параметре data.firma, который в первом ajax-запросе. То есть из второго аякс-запроса переменную фирмы надо как-то передать в первый аякс-запрос. Но как это сделать?
По аналогии - есть магазин товаров. Вы открываете товар и жмете кнопку "Добавить в корзину". Делается это без перезагрузки страницы. Но когда вы закрываете товар, а потом вновь его открываете, там же уже эта кнопка не активна? А у меня получается опять активна, и я снова могу добавить этот товар в корзину.