Я подготовил код для зависимых списков. Списков всего 3. При выборе значения в первом списке изменяется содержимое во втором (выборка происходит из БД); при выборе значения во втором списке изменяется содержимое в третьем. Так вот, значения из списков я передаю обработчику-php через ajax-запрос, который присваивает значение в супермассив $_GET в соответствующим ключом. С ajax кодом всё в порядке, он всё передаёт в обработчик, как я и запрашиваю.
Проблема наступает в самом обработчике. А именно, когда третий список должен изменять своё содержимое относительно второго в обработчике не может корректно осуществиться выборка из БД, ибо обработчик не получил $_GET параметр с первого списка (с первой выборки). Как можно передать выбранный $_GET с первого списка в обработчик второго?
* Использую PDO RedBeanPhP, можете не обращать внимание на выборку (там всё корректно)
Собственно код:
HTML & JS
<?
require "db.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('#select_worktype').on('change', function(){
var worktype = $(this).val();
if(worktype){
$.get(
"ajax.php",
{worktype: worktype},
function (data){
$('#select_workspace').html(data);
}
);
}else{
$('#select_workspace').html('<option disabled selected>Выбор формирования</option>');
}
});
$('#select_workspace').on('change', function(){
var workspace = $(this).val();
if(workspace){
$.get(
"ajax.php",
{workspace: workspace},
function (data2){
$('#select_position').html(data2);
}
);
}else{
$('#select_position').html('<option disabled selected>Выбор формирования</option>');
}
});
});
</script>
</head>
<body>
<br>
<br>
<br>
<br>
<form method="POST">
Выбор типа формирования
<select name="select_worktype" id="select_worktype">
<option disabled selected>Выбор типа формирования</option>
<option value="chairs">Кафедра</option>
<option value="departments">Отдел</option>
<option value="managements">Руководство</option>
<option value="centers">Центр</option>
<option value="controls">Управление</option>
<option value="groups">Группа</option>
<option value="others">Иное</option>
</select>
<br>
<br>
<br>
<br>
Выбор формирования
<select name="select_workspace" id="select_workspace">
<option disabled selected>Выбор формирования</option>
</select>
<br>
<br>
<br>
<br>
Выбор должности
<select name="select_position" id="select_position">
<option disabled selected>Выбор должности</option>
</select>
</form>
</body>
</html>
PHP (файл ajax.php)
<?
require "db.php";
if(isset($_GET['worktype']) && !empty($_GET['worktype'])){
echo '<option disabled selected>Выбор формирования</option>';
$worktype=$_GET['worktype'];
$last_worktype = R::findLast(''.$worktype.'');
$last_id=$last_worktype->id;
for($i=1; $i!=$last_id+1 ; $i++){
$search_workspace =R::findOne(''.$worktype.'', 'id = ?', array($i));
$search_workspace_name=$search_workspace->name;
$search_workspace_status=$search_workspace->status;
if($search_workspace_status==1){
echo '<option value="'.$i.'">'.$search_workspace_name.'</option>';
}
}
}else{
}
if(isset($_GET['workspace']) && !empty($_GET['workspace'])){
echo '<option disabled selected>Выбор должности</option>';
$workspace=$_GET['workspace'];
$view_position=R::findOne(''.$worktype.'', 'id = ?', array($workspace));
$view_position_positions=$view_position->positions;
$view_position_status=$view_position->status;
$this_positions=unserialize($view_position_positions);
foreach($this_positions as $key=>$value){
if(!empty($value)){
echo '<option value="'.$key.'">'.$value.'</option>';
}
}
}else{
}