php - $_POST 在 ajax req 中为空
问题描述
所以我试图通过使用 AJAX 发送的表单上传文件,除了$_POST
返回一个空数组(也是如此$_FILES
) - 虽然我不知道为什么。这是我的表格的顶部:
HTML - 从 PHP 生成(在 WP 函数内部)
$html .= '<form method="post" class="form-horizontal" id="product-slides-form" enctype="multipart/form-data">';
AJAX
//edit product gallery
$('#update-product-gallery').on('click', function()
{
var product_id = $(this).data('id'),
slides_form = $('#product-slides-form'),
slides_form_data = new FormData(slides_form[0]);
//create array of slides
var slides = {},
counter = 0;
$.each(slides_form.find('input'), function(j, v)
{
if ($(this)[0].files) {
$.each($(this)[0].files, function(i, files)
{
slides_form_data.append('slides-'+ counter, files);
counter++;
})
}
});
//add slideshow data
slides_form_data.append('slides', JSON.stringify(slides));
slides_form_data.append('product-id', product_id);
var slides_data = {};
slides_data['product_id'] = product_id;
slides_form_data.forEach(function(val, key)
{
slides_data[key] = val
});
//if I change data: to below test FormData than it works
var test = new FormData();
test.append('me', 1);
$.ajax({
data: slides_data,
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)}
})
});
我的脚本现在只是 var_dumps $_POST
+$_FILES
我使用以下命令控制台记录了 FormData:
// Display the key/value pairs
for (var pair of slides_data.entries()) {
console.log(pair[0]+ ', ' + pair[1]);
}
它返回正确的数据,所以我真的不确定为什么我的脚本没有获取$_POST
数据?我错过了一些非常明显的东西吗?
(如果需要更多代码 - 评论,我会添加更多)
解决方案
var slides_data = {};
那不是 FormData 对象。您需要发送一个 FormData 对象。
你在这里创建一个:
slides_form_data = new FormData(slides_form[0]);
继续使用slides_form_data
您的所有数据。不要创建第二个变量并忽略您为填充第一个变量所做的所有工作。
推荐阅读
- python - 从数据集中的字符串列表中查找出现
- c# - 如何在 Tizen 5.5 的后台定期运行代码?
- javascript - Yii2 Jquery onclick在选中和取消选中复选框时不起作用
- c++ - 在 procdump 针对异常创建转储后程序继续执行
- python - 将函数应用于列数未知的 DataFrame
- javascript - 数据以不同的输出呈现两次
- postgresql - PostgreSQL:备份表的 ID 与父表不同
- selenium - 为什么无法使用 Inspector 工具 Chrome 找到正确的 xpath 元素?
- python - 在 django 中注释单个模型实例(而不是查询集)
- html - Laravel 8:404 CSS 文件未找到,即使在文件加载后?