, поэтому я пытаюсь загрузить файлы через форму, отправленную с использованием 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
на данный момент
Я console.log запустил FormData, используя это:
// Display the key/value pairs
for (var pair of slides_data.entries()) {
console.log(pair[0]+ ', ' + pair[1]);
}
и он возвращает правильные данные, поэтому я действительно не уверен, почему мой скрипт не получает данные $_POST
? Я что-то упускаю действительно очевидное?
(если потребуется больше кода - прокомментируйте, и я добавлю больше)