php - PHP中如何从FormData获取数据和文件

标签 php ajax file-upload multiple-file-upload

我正在尝试通过 Ajax 将数据(输入文本、下拉列表等)和文件发送到 PHP 文件。我使用此函数添加名为 Action 的额外参数。操作可以是以下一些文本:“添加”、“编辑”、“读取”和“删除”(增删改查选项)。请参阅下面的脚本:

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中包含的数据。 看到Web Developer中的Params,我明白了:

-----------------------------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 应该包含我输入的文本、下拉菜单、文本区域等的值。

以下问题的答案:Uploading both data and files in one form using Ajax?我们可以将所有 HTML 控件放在一个 FormData 中。

提前致谢!

最佳答案

当您创建 FormData 时对象,您应该将表单传递给构造函数以使用表单值填充它。然后,您可以将 action 值附加到该结果:

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

当您这样做时,您应该会看到 $_POST$_FILES 在您的 PHP 代码中正确填充。

关于php - PHP中如何从FormData获取数据和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166663/

相关文章:

php - 我不知道如何修复此语法错误

php - 如何在查询绑定(bind)参数中放置两个以上的条件

javascript - 为什么我收到跨源请求被阻止 : The Same Origin Policy disallows reading the remote resource

javascript - 在wordpress中动态添加和删除html表中的行

jquery - 将ajax调用的结果放入变量中

css - Joomla:包含没有 iframe 的外部页面来应用自己的 CSS?

html - 通过网页上传大文件

django - 如何在django中对文件上传进行单元测试

PHP:这段代码的哪一行实际上传文件?

php - 连续计算多个值,连续两次遍历列