Как получить данные и файлы в PHP из FormData - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь отправить данные (входной текст, выпадающий список и т. Д.) И файлы в файл PHP через Ajax. Я использую эту функцию для добавления дополнительного параметра с именем Действие . Действие может быть одним из этих текстов: «добавить», «редактировать», «прочитать» и «удалить» (необязательные параметры). Смотрите скрипт ниже:

function recordActions(action_name, id) {
  //id = (typeof id == "undefined") ? '' : id;

  var frm = document.getElementById(action_name + '_form');
  var form_data = new FormData();

  form_data.append('action', action_name);
  form_data.append('fd', frm);

  $.ajax({
          type: 'post',
          dataType: 'json',
          url: '<?php echo FILENAME_USERS_ACTIONS; ?>',
          data: form_data, 
          cache: false,
          processData: false,
          contentType: false,
          success:
            if (data.action == 'add' || data.action == 'edit') {
                $("#" + action_name + '_form')[0].reset();
                $("#" + action_name + '_div').slideUp();
            }
            showWeekAgenda();

            }          
      });

      // esta línea evita que la página se refresque dando a Cancelar la visita y evita que salga Error en Success de Arriba
      if (action_name == 'cancel') return false; 
    }

Когда Ajax вызывает файл PHP (), я не знаю, как получить доступ к данным, содержащимся в FormData. Увидев Params в Web Developer, я понял:

-----------------------------81668061412059330971865480216
Content-Disposition: form-data; name="action"

actadd
-----------------------------81668061412059330971865480216
Content-Disposition: form-data; name="fd"

[object HTMLFormElement]
-----------------------------81668061412059330971865480216--

Затем я поместил код в PHP, чтобы увидеть параметры и их значения:

print_r($_POST);
print_r($_FILES);

echo '<br>Post: ' . $_POST['fd'];

но мне нечем помочь.

Array
(
    [action] => actadd
    [fd] => [object HTMLFormElement]
)
Array
(
)
<br>Post: [object HTMLFormElement]

Кто-нибудь знает, как получить доступ к любому значению внутри fd ? У fd должны быть значения моих вводимых текстов, выпадающего меню, текстовой области и т. д.

После ответа на этот вопрос: Выгрузка данных и файлов в одной форме с использованием Ajax? мы можем поместить все HTML-элементы управления в одну форму FormData.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 января 2019

Когда вы создаете объект FormData, вы должны передать форму конструктору, чтобы он заполнился значениями форм. Затем вы можете добавить значение action к этому результату:

var frm = document.getElementById(action_name + '_form');
var form_data = new FormData(frm);
form_data.append('action', action_name);

Когда вы делаете это таким образом, вы должны видеть, что $_POST и $_FILES правильно заполнены в вашем PHP-коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...