Добрый день коллеги, возникла необходимость в форме которая отправляется с помощью Ajax переслать файл,
что увидел c использованием jQuery:
jquery.js?ver=1.12.4:4 Uncaught TypeError: Illegal invocation
Изменил processData на false, для отмены конвертации данных, после чего файл отгружается, но теперь возник вопрос
при обращении к action-у возвращается 0
Что сообщает о том что данный action не зарегистрированный
Но при этом без отключения processData, все работает корректно
Я так понимаю что таким образом на back передается JSON объект который WordPress не может корректно распарсить и определить action
Собственно как дальше быть? Как в action передать файл, или может есть способ отдать ajax запрос без регистрации обработчика через WordPress?
Ну и собственно сам код
function uploadFile() {
var formData = new FormData();
var fileInput = $('[type="file"]')[0];
$.each(fileInput.files, function(key, value) {
formData.append(key, value);
});
jQuery.ajax({
url: location.origin + '/wp-admin/admin-ajax.php',
type: "POST",
data: {
action: 'test',
files: formData
},
cache: false,
dataType: 'multipart/form-data',
processData: false,
contentType: false,
})
.then(function(data) {
console.log('RESPONCE', data);
});
return true;
};
PHP обработчик
function test(){
if($_FILES){
echo count($_FILES);
}else{
echo 'test';
}
die(0);
}
add_action('wp_ajax_test', 'test');
add_action('wp_ajax_nopriv_test', 'test');
Сборка персонального компьютера от Artline: умный выбор для современных пользователей