$ _POST равен нулю из ajax req - PullRequest
0 голосов
/ 15 мая 2018

, поэтому я пытаюсь загрузить файлы через форму, отправленную с использованием 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? Я что-то упускаю действительно очевидное?

(если потребуется больше кода - прокомментируйте, и я добавлю больше)

1 Ответ

0 голосов
/ 15 мая 2018
var slides_data = {};

Это не объект FormData.Вам необходимо отправить объект FormData.

Вы создаете его здесь:

slides_form_data = new FormData(slides_form[0]);

Продолжайте использовать slides_form_data для всех ваших данных.Не создавайте вторую переменную и игнорируйте всю работу, которую вы проделали для заполнения первой.

...