通过AJAX调用时,$ _FILES不会填充文件

我正在使用简单的ajax调用来提交表单数据,我试图将一些表单输入与文件一起发送。

$("#submit-uploaded-audio").on("click", function () { var post_data = new FormData(); var file = $("#audio_file").prop('files')[0]; post_data.append('key1', 'value1'); post_data.append('key2', 'value2'); post_data.append('file', file); $.ajax({ url: "/process_audio_upload", type: "POST", data: post_data, cache: false, contentType: false, processData: false, success: function(data) { console.log(data); // some logic }, error: function(error) { // some logic here } }); }); 

Ajax调用转到服务器url(codeigniter框架),但调用中发布的数据没有填充到$ _POST以及$ _FILES(两个数组都为空)

检查php.ini设置和文件上传设置看起来不错

但是,“php:// input”以原始格式显示所需数据

 var_dump(file_get_contents("php://input")); 

我想将这些数据分别放到$ _POST和$ _FILES数组中,以便我可以做进一步的操作。

提前致谢。

还试过以下解决方案

https://stackoverflow.com/a/10899796/4349933

https://stackoverflow.com/a/10899796/4349933

它可能与post_data变量是空的有关,因为你正在创建一个空的FormData ,然后它可能试图通过jQuery append追加 ,它被设计为附加HTML元素…

尝试简单地做:

 post_data.key1 = 'value1'; post_data.file = file; console.log(post_data); 

这应该返回:

 FormData {key1: "value1", file: {...}} 

如果FormData.append无法正常工作,我会尝试不仅仅使用jQuery进行测试并执行Javascript默认请求 。

编辑 :测试URL是否正确

由于post_data似乎没问题 ,因此使用相同的URL(即yourdomain.here/process_audio_upload )通过其他网站(例如hurl.it )执行POST请求。 如果什么都没有回来,那么URL路由可能就是问题所在。

试试这段代码:

 $("#submit-uploaded-audio").on("click", function () { var post_data = new FormData(); var file = document.getElementById('audio_file').files[0]; post_data.append('key1', 'value1'); post_data.append('key2', 'value2'); post_data.append('file', file); $.ajax({ url: "/process_audio_upload", method: "POST", data: post_data, contentType: false, processData: false, success: function(data) { console.log(data); // some logic }, error: function(error) { // some logic here } }); }); 

现在尝试打印print_r($ _ FILES)和print_r($ _ POST)

我注意到你使用的是’type’参数而不是’method’。 所以试试这个代码。 我做了一些改动。

尝试通过将

元素传递给构造函数来创建formData对象。 例如,给出这个HTML

 

并假设key1key2

元素的名称

 $("#submit-uploaded-audio").on("click", function () { var form = document.getElementById('a-form'); var post_data = new FormData(form); $.ajax({ url: "/process_audio_upload", method: "POST", data: post_data, //etc ... 

好文档在这里