Member 13605567 Ответов: 1

Отправка файла загрузки фотографий в объект JSON через AJAX


Я знаю, что в интернете уже есть сообщения, которые охватывают эту тему, но большинство примеров основаны на jQuery, и мне нужно сделать это на простом JavaScript. Я нашел несколько редких примеров JavaScript на эту тему

тема онлайн, но я не могу заставить ее работать в моей структуре кода. Если кто-нибудь может дать мне пример кода моего кода, то я буду очень признателен за это.

Это мой код.

index.php

<style>

#photo-input{
display: block;
margin-bottom: 50px;
}

</style>

<script>

document.addEventListener('DOMContentLoaded',function(){

document.querySelector('#submit').addEventListener('click',sendUploadInfo);

function sendUploadInfo(){

var photo= document.querySelector('#photo-input').files[0];

//<JSON data>

var upload_info = {
    first_name: "John",
    last_name: "Smith",
    photo: photo
};

//</JSON data>

var upload_info_json_object= 'upload_info_json_object='+JSON.stringify(upload_info); 

//<AJAX>
var xhr= new XMLHttpRequest();
xhr.onreadystatechange= function(){

if(xhr.readyState == 4){

document.querySelector('#output').innerHTML= xhr.responseText;

}
}

xhr.open('POST','x');
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(upload_info_json_object);
//</AJAX>
}

});

</script>

<input type='file' id='photo-input'>

<button id='submit'>Send JSON data</button>

<div id='output'></div>


x.php

<?php

$upload_info_json_object = json_decode($_POST['upload_info_json_object']);

$first_name= $upload_info_json_object->first_name;
$last_name= $upload_info_json_object->last_name;


//Photo upload section
//$photo= $upload_info_json_object->photo; //<-????
///???

if(isset($_FILES['photo'])) {
$file=$_FILES['photo']['name'];
$location='images/'.$file;
move_uploaded_file($_FILES['photo']['tmp_name'],$location); 
}
//

?>

<h1><?php echo $first_name.' '.$last_name.' just uploaded a photo.'; ?></h1>


Что я уже пробовал:

Зашел на другие справочные сайты и не повезло, и не повезло с google.

1 Ответов

Рейтинг:
1

Richard Deeming

Вы не можете загрузить файл как часть документа JSON. Это не то, как работает загрузка HTML-файлов.

Чтобы загрузить файл через AJAX, вам нужно будет использовать то FormData класс[^]. Затем ваши значения формы будут доступны на сервере с помощью обычного $_POST и $_FILES коллекции.

Отправка файлов с помощью объекта FormData | использование объектов FormData - Web API | MDN[^]