Как правильно передать из ajax в php?

Здравствуйте!
Имеется ajax запрос, который должен передать данные в php:
script
function getType()
	{
		return $('#soft_type').val();
	}	
	
	function setName()
	{
		var mydata = getType();
		var userdata = {'id':mydata};
		$.ajax({
				type: "POST",
				url: "index.php",
				data:userdata, 
				success: function(data){
					console.log(data);
				}
        });
	}

Код, который, я бы хотел, должен принимать данные из запроса:
вызывает скрипт
<div class = "col-sm-2">
<select class="form-control" id="soft_type" name="soft_type" onchange="setName()" required="required"">
											
<?php
$result_types = DB::select('SELECT type FROM equip_cost GROUP BY type');
foreach ($result_types as $rtype) {
	echo '<option>';echo $rtype->type;echo ' </option>';
}
?>
</select>
														
</div>


получает из аякса
<div class = "col-sm-2">
<select class="form-control" id="soft_type" name="soft_type" onchange="setName()" required="required"">
											
<?php
$result_types = DB::select('SELECT type FROM equip_cost GROUP BY type');
foreach ($result_types as $rtype) {
	echo '<option>';echo $rtype->type;echo ' </option>';
}
?>
</select>
<div class="col-sm-3">
<select class="form-control" id="soft_name" name="soft_name" required="required">
<?php
if(isset($_POST['id'])) {
	$idtype = $_POST;
	$idtype = ['id'];
	$result_types = DB::select('SELECT name FROM equip_cost where type="'.$idtype.'"');
	foreach ($result_names as $rname) {
	echo '<option>';echo $rname->name;echo ' </option>';
	}
} 
else {
echo '<option>Choose your destiny</option>';
}
?> 	
</select>
</div>														
</div>


Как правильно передать? Так как сделал я - ругается Undefined index: id
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
gzhegow
@gzhegow
Думал, стану умнее, когда адаптируюсь, но нет
Так у тебя не аякс ругается, а видимо сама страница когда ты её без аякса запрашиваешь, потому что туда ничего не передали.

Проблема комплексная.

Не выводи в ответ ничего кроме редиректа, когда данные отправляются постом. Нефиг. Есть Гет для этого. Нет, это не значит что данные нужно отправлять гетом. Это значит что когда ГЕТ - отдавай верстку. А когда пост - сохраняй данные. Если нужно с Гета на Пост перейти и не потерять - есть сессия (привязана к тому кто запрашивал) или база (для всех, придется ввести признак, как ты поймешь что это его). Этот совет актуален когда ты запрашиваешь страничку через браузер.

В случае с Аяксом (параллельной отправкой) действуют правила API - компьютеры общаются между собой, им плевать что ты хотел нарисовать, они понимают только текст. Причем не понимают - они его передают и обрабатывают. А если еще точнее то они передают пакеты и им даже на текст плевать, но с текстом тебе привычнее работать. То есть в ответ на Пост пусть вылетает JSON с массивом а не верстка. Верстку строим потом на клиенте.

В третьих можно писать так $id = $_POST['id'] ?? null; если пыха (не бэха) семерка. На крайняк
$id = (! empty($POST['id']) ? $_POST['id'] : null;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы