Почему в файле не видит $_POST['action']
из скрипта action
?
$('#address__form button').click(function() {
var form_data = $("#address__form").serialize();
$.ajax({
type: "POST",
action: "address",
url: "assets/ajax.php",
data: form_data,
success: function(data) {
var parse_data = JSON.parse(data);
if(parse_data.err > 0){
$('.error_messages').detach();
$('#address__form').before('<div class="error_messages error"><ul>'+parse_data.error_message+'</ul></div>');
}else{
if(parse_data.typea === 0){
$('.error_messages').detach();
$('.data-address').append(parse_data.item);
}
if(parse_data.typea == 1){
alert("Редактировано");
}
}
},
error: function(data) { // Данные не отправлены
alert('Ошибка. Данные не отправлены.');
}
});
});
форма
<form method="post" id="address__form">
<input type="hidden" name="id" value="">
<div class="address__name">
<input type="text" name="name_address" id="in_address" value="" placeholder="Название адреса">
<div class="checkbox">
<input type="checkbox" name="address_default" id="ad" value="1">
<label for="ad">Сделать основным</label>
</div>
</div>
<div class="address__input">
<input type="text" name="postcode" placeholder="Индекс">
<input type="text" name="city" id="address_city" value="" placeholder="Населенный пункт">
<input type="text" name="street" id="address_street" value="" placeholder="Улица">
<input type="text" name="home" value="" placeholder="Дом">
<input type="text" name="building" value="" placeholder="Корпус">
<input type="text" name="building1" value="" placeholder="Строение">
<input type="text" name="flat" value="" placeholder="Квартира">
</div>
<textarea name="message" id="message" cols="30" rows="5" placeholder="Примечания"></textarea>
<button type="button" class="btn-dark">Сохранить</button>
</form>
обработчик
$formData = $_POST['formData'];
$id = $formData['id'];
$name_address = $formData['name_address'];
$address_default = $formData['address_default'];
$postcode = $formData['postcode'];
$city = $formData['city'];
$street = $formData['street'];
$home = $formData['home'];
$building = $formData['building'];
$building1 = $formData['building1'];
$flat = $formData['flat'];
$message = $formData['message'];
$error_message = '';
$output = [];
$item = '';
if (empty($name_address)) $error_message .= '<li>Укажите название адреса</li>';
if (empty($city)) $error_message .= '<li>Город указан некорректно. Проверьте правильность написания города или укажите ближайший город, если вы живете в населенном пункте, после чего в комментарии к заказу уточните Ваш адрес.</li>';
if (empty($street)) $error_message .= '<li>Укажите, пожалуйста, название улицы</li>';
if (empty($home)) $error_message .= '<li>Укажите, пожалуйста, номер дома</li>';
if (empty($flat)) $error_message .= '<li>Укажите, пожалуйста, номер квартиры или поставьте прочерк.</li>';
if (!empty($error_message)) {
$output = array("err"=>1,"error_message"=>$error_message);
echo json_encode($output);
}else{
if (!empty($id)){
$modx->query("UPDATE modx_user_address SET name_address = '".$name_address."',address_default='".$address_default."',postcode='".$postcode."',city='".$city."',street='".$street."',home='".$home."',building='".$building."',building1='".$building1."',flat='".$flat."',message='".$message."' WHERE id = ".$id."");
$count = $modx->exec($sql); // здесь будет количество строк
if ($count > 0){
$output = array("err"=>0,"typea"=>1,"id"=>$id);
}else $output = array("err"=>1,"typea"=>1,"id"=>$id,"error_message"=>"<li>Редактирование адреса не выполнено! Повторите попытку.</li>");
echo json_encode($output);
}else{
$modx->query("INSERT INTO `modx_user_address`
(name_address, address_default, postcode, city,street,home,building,building1,flat,message,user_id)
VALUES ('".$name_address."','".$address_default."', '".$postcode."','".$city."','".$street."','".$home."','".$building."','".$building1."','".$flat."','".$message."','".$modx->user->get('id')."')");
$id = $modx->lastInsertId();
if ($message) $comment = '<p class="comment">'.$message.'</p>';
if ($building) $commentb = ' корпус '.$building;
if ($building1) $comments = ' строение '.$building1;
if ($address_default == 1) $default = 'Основной';
$item = '
<div class="item">
<div class="header">
<p class="title">'.$name_address.'</p>
<span>'.$default.'</span>
<div class="data-btn">
<button class="edit" data-id="'.$id.'"></button>
<button class="delete" data-id="'.$id.'"></button>
</div>
</div>
<div class="body">
<p>'.$postcode.' '.$city.' '.$street.' д.'.$home.' '.$commentb.' '.$comments.' кв.'.$flat.'</p>
'.$comment.'
</div>
</div>
';
$output = array("err"=>0,"typea"=>0,"id"=>$id,"item"=>$item);
echo json_encode($output);
}
}
Если посмотреть документацию по ajax, то вы не найдете в нем параметра action. Чтобы корректно передать этот параметр или добавьте в форму
<input type="hidden" name="action" value="address">
или в скрипте измените параметр data следующим образом:
data: {
action: 'address',
formData: form_data
}
И у вас в $_POST['action'] будет ваш экшен, данные из формы будут в $_POST['formData']
Если не ошибаюсь, то ключ action это какой вызвать метод
Т.е. вот эквивалент <form action="uploadPhoto.php" method="POST">
А значит в объекте $_POST не будет упоминания об action
(если правильно помню, он будет в URL)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Вот бьёт такую ошибку, сижу уже с 30 минут и не могу увидеть свою ошибку( А это в консоли браузера
Подскажите пожалуйста, не суммирует значение input , что не правильно в коде: