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

Oz-*_*rod 2 php ajax file-upload multiple-file-upload

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

\n\n
function recordActions(action_name, id) {\n  //id = (typeof id == "undefined") ? \'\' : id;\n\n  var frm = document.getElementById(action_name + \'_form\');\n  var form_data = new FormData();\n\n  form_data.append(\'action\', action_name);\n  form_data.append(\'fd\', frm);\n\n  $.ajax({\n          type: \'post\',\n          dataType: \'json\',\n          url: \'<?php echo FILENAME_USERS_ACTIONS; ?>\',\n          data: form_data, \n          cache: false,\n          processData: false,\n          contentType: false,\n          success:\n            if (data.action == \'add\' || data.action == \'edit\') {\n                $("#" + action_name + \'_form\')[0].reset();\n                $("#" + action_name + \'_div\').slideUp();\n            }\n            showWeekAgenda();\n\n            }          \n      });\n\n      // esta l\xc3\xadnea evita que la p\xc3\xa1gina se refresque dando a Cancelar la visita y evita que salga Error en Success de Arriba\n      if (action_name == \'cancel\') return false; \n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

当Ajax调用PHP文件()时,我不知道如何访问FormData中包含的数据。\n查看Web Developer中的参数,我明白了:

\n\n
-----------------------------81668061412059330971865480216\nContent-Disposition: form-data; name="action"\n\nactadd\n-----------------------------81668061412059330971865480216\nContent-Disposition: form-data; name="fd"\n\n[object HTMLFormElement]\n-----------------------------81668061412059330971865480216--\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,我在 PHP 中添加了一些代码来查看参数及其值:

\n\n
print_r($_POST);\nprint_r($_FILES);\n\necho \'<br>Post: \' . $_POST[\'fd\'];\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我没有什么可以帮助我的。

\n\n
Array\n(\n    [action] => actadd\n    [fd] => [object HTMLFormElement]\n)\nArray\n(\n)\n<br>Post: [object HTMLFormElement]\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人知道如何访问fd内部的任何值吗?fd 应该包含我的输入文本、下拉列表、文本区域等的值。

\n\n

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

\n\n

提前致谢!

\n

Nic*_*ick 5

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

var frm = document.getElementById(action_name + '_form');
var form_data = new FormData(frm);
form_data.append('action', action_name);
Run Code Online (Sandbox Code Playgroud)

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