AJAX文件上传后$ _POST和$ _FILES为空

我是网络开发的新手,我遇到的最新问题是ajax文件上传…

现在我有两个HTML输入字段; 文件输入和按钮。

  

单击按钮后,我调用具有以下代码的函数。

 var frame = document.getElementById('Frame_'); var frameImg = frame.files[0]; var form_data = new FormData(); form_data.append('frame', frameImg); jQuery.ajax({ url : './handler.php', type : 'post', data : form_data contentType : false, processData : false, success : alert("Frame Uploaded") }); 

当我在var_dump()$ _POST和$ _FILES数组时,它将两个数组显示为空。 这是尽管Chrome Dev阅读中的“请求有效负载”

内容处理:表格数据; NAME = “框架”; 文件名= “GoldFrame.jpg”

内容类型:image / jpeg

我认为这意味着我在前端选择的文件信息被成功“发布”到我的handler.php文件。 这是错误的解释吗?

无论哪种方式,有人可以给我一个问题的答案吗? 或者至少指向可能有我答案的资源? 似乎有许多类似的问题沿着同样的路线,但我没有看到一个有一个坚实的答案。

我过去曾经使用过iframe这种东西,但这似乎是一个非常hacky的方法,我希望将来可以灵活地使用ajax来完成这类任务。

感谢帮助。

试试这个。

表格 (index.html)

 

脚本 (script.js)

 $("#uploadForm").on('submit',(function(e) { e.preventDefault(); $.ajax({ url: "handler.php", type: "POST", data: new FormData(this), contentType: false, cache: false, processData: false, success: function(data){ console.log(data); } }); })); 

服务器端 (handler.php)

  

你在handler.php文件中使用var_dump()你的$ _FILES / $ _ POST数组吗?

如果你试图将这些变量转储到具有ajax调用的文件中,它将无法工作,因为AJAX正在进行前端调用,而files / post变量是服务器端变量…这意味着只有处理程序.php文件将提供这些变量。

尝试在handler.php中添加var_dump()调用,并在ajax调用中输出该结果,我希望您将看到您正在寻找的结果。