Не могу получить данные через FormData

352
08 сентября 2017, 21:44

Нужна Ваша помощь. У меня проблема с объектом FormData. Все данные заносятся через класс. К классу обращаюсь файл ajax.php он же обработчик ajax.js.

(ajax.php - обработчик)
     $actions = array(       
        'insert' => array(
          'object' => 'Group',
          'method' => 'insert'
         )
      );

if ( isset($actions[$_POST['action']]) )
{
   $use_array = $actions[$_POST['action']];
   $obj = new $use_array['object'];
if (isset($_POST)){
      unset($_POST['action']);
         $a = array();
         foreach ($_POST as $key=>$value){
              $a[$key]=$value;
         }
       echo $obj->$use_array['method']($a);
   }

}

function __autoload($class_name)
{
    $filename = './classes/'. strtolower($class_name) . '.class.php';
    if ( file_exists($filename) )
    {
         include_once $filename;
     }
}

Кусок кода класса метода обработчика метода: 'method'=>'insert'

 public function insert_header(){
// если в массиве $_POST есть ключ name и его значение не равно пустоте, то
      if ((isset($_POST['name'])) && (!empty($_POST["name"]))) {
        // присвоить $result['name'] значение $_POST['name']
        $result['name'] = $_POST['name'];
      } else {
        // иначе, $result['name'] присвоить указанную строку
        $result['name'] = 'Вы не ввели поле name!';
      }
      // если в массиве $_POST есть ключ message и его значение не равно 
      пустоте, то  
      if ((isset($_POST['message']))&& (!empty($_POST["message"]))) {
        // присвоить $result['message'] значение $_POST['message']
        $result['message'] = $_POST['message'];
      } else {
        // иначе, $result['message'] присвоить указанную строку
        $result['message'] = 'Вы не ввели поле message!';
      }
// преобразовать массив $result в json, а затем вывести его с помощью          echo
      echo json_encode($result);

Форма которую обрабатывает скрипт:

<form id="message">
  <div class="form-group">
     <label for="name">Имя:</label>
     <input type="text" class="form-control" name="name">
  </div>
  <div class="form-group">
       <label for="name">Сообщение:</label>
       <textarea class="form-control" rows="3" name="message"></textarea>
  </div>
   <button id="send-message" class="btn btn-primary">Отправить 
   сообщение</button>
 </form>

Теперь код самого ajax.js

  $('#message').submit(function(e) {
     var formData = new FormData($('#message')[0]);
     $.ajax({
          url: 'ajax.php',
          data: 'action=insert&'+formData,
          processData: false,
          contentType: false,
          cache:false,
          type: 'POST',
          dataType: 'JSON',
          success: function(data) {
               var output = '<ul>';
               $.each(data, function(key, value) {
                   output += '<li><b>' + key + "</b>: " + value + '</li>';
               });
               output += '</ul>';
               $('#result').html(output);
          }     
    });
   // отменяем отправку формы стандартным способом
   e.preventDefault();
  });

Проблема в том, что не могу передать данные из формы по ссылке из data: - data: 'action=insert&'+formData. Если убрать: " data: 'action=insert&'" и код из обработчика перекинуть в файл ajax.php минуя класс Group, то работает. Так нет. Мне это очень важно, чтобы работало именно через FormData() и через класс Group, т.к. буду передавать файл совместно с другими данными из формы (поле фалй пока не создал, хочу получить чисто данные через метод FormData). Если использую просто сериализацию serialize() и "action=insert&" данные получает метод класса, всё успешно работает.

Пробовал так: formData('action','insert'); не работает. Что посоветуете?

Answer 1
<form id="message">
  <input type="hidden" id="action" name="action" />
  ...
$('#message').submit(function(e) {
  $(this).find("#action").val("insert");
  var formData = new FormData(this);
  $.ajax({
    url: 'ajax.php',
    data: formData,
   ...
READ ALSO
Как clone() svg элемент?

Как clone() svg элемент?

Проблема в том, что нужно клонировать svg элемент и добавить его в другом местеИспользую jquery clone(), но вместо элемента я получаю в html [Object, Object]

318
Не работает css-класс

Не работает css-класс

Я пишу css-правило

367
Зуммирование, шрифты и Firefox

Зуммирование, шрифты и Firefox

Текст небольшого размера, допустим 12px занимает на Opera/Chrome 80 пикселей в ширинуИ в пределах зума 50%-500% ширина меняется только в пределах сотых/тысячных

286
Travis-Ci не получается запустить

Travis-Ci не получается запустить

Здравствуйте, помогите с Travis-Ci, не разу с ним не работалСобрал проект с помощью Maven, добавил в репрезиторий файл "

342