You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AJAX上传文件时$_POST与$_FILES返回空数组问题排查

问题根源:错误地将FormData转为普通对象传递

你遇到的核心问题是把FormData对象转换成了普通JavaScript对象slides_data,然后用这个普通对象作为AJAX的data参数——这直接破坏了文件上传所需的multipart/form-data数据结构,后端自然无法解析出$_POST和$_FILES数据。

具体错误代码分析

看你这段关键代码:

var slides_data = {};
slides_data['product_id'] = product_id;
slides_form_data.forEach(function(val, key) {
  slides_data[key] = val
});

FormData是专门用于处理文件上传的特殊对象,它会自动封装符合multipart/form-data格式的数据(包括文件二进制流)。但你把它转成普通对象后,文件二进制数据会丢失,整个请求的格式也不再符合后端解析要求,最终导致$_POST和$_FILES返回空数组。

修正方案:直接传递FormData对象

你只需要去掉转换普通对象的步骤,直接把slides_form_data作为AJAX的data参数即可。另外你已经通过slides_form_data.append('product-id', product_id)把产品ID加入了FormData,不需要再单独处理。

修正后的AJAX代码如下:

$.ajax({
  data: slides_form_data, // 直接使用FormData对象
  dataType: 'text',
  type: 'post',
  url: PLUGIN_ROOT+ 'admin/inc/scripts/add-product-slides.php',
  cache: false,
  contentType: false,
  processData: false,
  success: function(res) {console.log(res)},
  error: function(res) {$.fn.showPopup(2, 'Something went wrong. Please try again.', res)}
});

额外检查点

  1. 你的表单已经正确设置了enctype="multipart/form-data",这部分没问题。
  2. 后端PHP文件要确保没有全局清空$_POST/$_FILES的操作(比如某些安全过滤插件的影响)。
  3. 注意你代码里的slides对象目前是空的,因为你遍历input时只处理了files但没往slides里添加内容,不过这是功能逻辑问题,不影响当前的上传数据接收。

内容的提问来源于stack exchange,提问作者treyBake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:53:58