@lexstile

Почему у меня пусто в formData?

Увидел схожую проблему, но решения не нашел, помогите... https://toster.ru/q/222644
<form name="order" id="form-order" class="quest" method="POST" action="" enctype="multipart/form-data">
						<input name="name" id="client_name_order" type="text" placeholder="Ваше имя" >
						<input name="phone" id="client_phone_order" type="text" placeholder="Ваш телефон" >
						<input name="email" id="client_email_order" type="text" placeholder="Ваш e-mail" >
						<textarea name="text" id="client_text_order" placeholder="Ваше сообщение"></textarea>
						<p>Прикрепить файл:</p>
						<input name="file" id="file" type="file" >
						<input name="submit" type="submit" onclick="setimage(); return false;" value="ОТПРАВИТЬ">
					</form>

function setimage(){
    // элемент, с помощью которого пользователь выбирает файл
    var file = $('#file');
    // если файл выбран, то
    if (file.prop('files').length) {
      // создаём объект FormData
      var formData = new FormData();
      // добавляем в объект FormData файл 
      formData.append('file', file.prop('files')[0]);
      // выполняем HTTP (AJAX) запрос
      //   url - адрес, содержащий php скрипт, который будет обрабатывать запрос
      //   procedData - параметр, с помощью которого отключим преобразование данных в строку запроса
      //   contentType - параметр, с помощью которого отключим установления  типа контента jQuery
      //   type - параметр, с помощью которого установим в качестве метода отправки запроса POST
      //   success - параметр, который 
      $.ajax({
        url: '/mailer/send_letter.php',
        data: formData,
        processData: false,
        contentType: false,
        type: 'POST',
        success: function(data) {
          console.log(data);
        }
      });
    } else {
      alert(0);
    }
}

<?php

 if (count ($_POST) > 0) 


 {


		include "class.phpmailer.php";





		$default='не уточняется';





					


        $text = $_POST['message'];
			



		$result = '0';


		


	


		


	





            $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch


            try {





                $mail->CharSet = "UTF-8";
				$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");




                $mail->SetFrom('info@'.$_SERVER['HTTP_HOST']);


                $mail->Subject = "Заказ обратного звонка с сайта ".$_SERVER['HTTP_HOST'];


                //    $text = $message;





                $mail->MsgHTML($text);





                $text = str_replace("<br/>", "\n", $text); 


                $text = strip_tags($text);


                $mail->AltBody = $text;

if (isset($_FILES['uploaded_file']) &&
    $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) {
    $mail->AddAttachment($_FILES['uploaded_file']['tmp_name'],
                         $_FILES['uploaded_file']['name']);
}



				$mail->AddAddress('test@mail.ru');
				$mail->AddAddress('test@yandex.ru');


                


                // отправляем наше письмо


                if($mail->Send())


                {


                    echo "0";


                }


            }





            catch (phpmailerException $e) {


                echo "1";


            }     catch (Exception $e) {


                echo "1";


            }


	


	}


?>
  • Вопрос задан
  • 12957 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
1. у полей формы нет атрибутов name
2. на вход FormData надо подавать ссылку на форму а не объект jQuery.
То есть data = new FormData($('#form-order')[0]) или
data = new FormData(document.querySelector('#form-order'))


3. Если уж пользуетесь jQuery, то можно вообще без FormData:
$.ajax({
      url: '/mailer/send_letter.php',
      type: 'post',
      data: $('#form-order').serialize(),
      ...
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ZardoZAntony
программист, сис. админ
Еще одна причина пустоты в FormData если у всех input стоит атрибут disable. Никак не мог понять в чем беда, а этот аттрибут перед выполнении запроса расставлялся через js. Видимо тот, кто делал эту форму так ее защитил от ввода на время запроса :) Вроде смешно, а я 2 часа убил.
Ответ написан
@NinaRudz
У меня ошибка, аналогичная описанной, приключается при передаче слишком большого файла.
То есть небольшие файлы передаются на сервер без проблем через FormData, а чуть больше - пустая форма.
Вот пока не нашла, как определить ограничение и пофиксить ошибку.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы