Публикация данных с помощью jQuery в WordPress выполняется успешно, но не выполняется с FormData

#javascript #php #jquery #wordpress #file-upload

#javascript #php #jquery #wordpress #загрузка файла

Вопрос:

Я хочу загрузить файл с помощью jQuery / Ajax в моем плагине WordPress. Вызов javascript для PHP работает. Итак, подключение и т. Д. работает. Но как только я отправляю FormData, необходимые для публикации файлов, я больше не получаю доступ к функции PHP.

Javascript,

         var doesntWork = new FormData();
        doesntWork.append('file', 'a name');

        var withthisItWorks = 'text'

        var data = {
            'action': 'emfi_file_upload',
            'data': doesntWork
        }

        $.ajax({
            type: "POST",
            url: ajax_object.ajaxurl,
            data: data,
            success: function(response) {
                jQuery('#emfi-message').html(`<span style="color: green;">Respons: ${response}</span>`);
            }
        });

  

Функция PHP просто возвращает строковый ответ:

 function emfi_file_upload_callback() {
    echo 'Yes, in the callback';
    wp_die();
}
  

Когда я помещаю обычный текст в свой объект данных, я получаю ответ от функции PHP. Когда я ввожу FormData, ответа нет. Я перепробовал множество примеров в Интернете, но каждый раз все сводится к этому. Добавление ContentType: false и ProcessData: false, как упоминалось где-то еще, не помогло. Что не так?

Ответ №1:

Все отправляемые поля должны быть в объекте formdata .
Кроме того, для FormData для работы с jQuery.ajax processData и contentType должно быть установлено значение false.

     var doesWork = new FormData();
    doesWork.append('file', someFile);
    doesWork.append('action', 'emfi_file_upload');
  
    $.ajax({
        type: "POST",
        url: ajax_object.ajaxurl,
        data: doesWork,
        contentType: false,
        processData: false,
        success: function(response) {
            jQuery('#emfi-message').html(`<span style="color: green;">Respons: ${response}</span>`);
        }
    });