Передача action из скрипта

98
06 октября 2019, 10:30

Почему в файле не видит $_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);
              }
      }
Answer 1

Если посмотреть документацию по ajax, то вы не найдете в нем параметра action. Чтобы корректно передать этот параметр или добавьте в форму

<input type="hidden" name="action" value="address">

или в скрипте измените параметр data следующим образом:

data: {
   action: 'address',
   formData: form_data
}

И у вас в $_POST['action'] будет ваш экшен, данные из формы будут в $_POST['formData']

Answer 2

Если не ошибаюсь, то ключ action это какой вызвать метод

Т.е. вот эквивалент <form action="uploadPhoto.php" method="POST">

А значит в объекте $_POST не будет упоминания об action (если правильно помню, он будет в URL)

READ ALSO
Почему выдает ошибку в функции

Почему выдает ошибку в функции

Выходит такая ошибка:

114
Cannot set property &#39;innerHTML&#39; of undefined

Cannot set property 'innerHTML' of undefined

Вот бьёт такую ошибку, сижу уже с 30 минут и не могу увидеть свою ошибку( А это в консоли браузера

115
Суммирование value input

Суммирование value input

Подскажите пожалуйста, не суммирует значение input , что не правильно в коде:

108
Индексы в join запросах

Индексы в join запросах

Смотрю выполнение запроса через EXPLAIN :

136