Momentan baue ich eine einzelne Seite Anwendung in ES6 + PHP und habe ein paar Probleme mit Ajax-Anrufe. Ich kann kein Beispiel für Dateiuploads über die Fetch-API finden und ehrlich gesagt habe ich keine Ahnung, ob Ajax-Aufrufe so aussehen sollten, weil ich die Daten in PHP lesen kann.Hochladen von Dateien in Einzelseiten-Anwendungen
So etwas sollte ein Formular an das Back-End senden. Diese ist das, was ich so weit gekommen, aber es funktioniert nicht und denken, kann nicht von einer sauberen Lösung :(
JS:
const headers = new Headers({
'Accept':'application/json',
'Content-Type':'application/json'
});
class User{
constructor(){
this._ajaxData = {};
}
/**
* @param {object} curObj
* @param {int} curObj.ID
* @param {HTMLElement} curObj.InputDate
* @param {HTMLElement} curObj.Username
* @param {HTMLElement} curObj.UploadFile = <input type='file'>
*/
collectInputData(curObj){
this._ajaxData = {
UserID: curObj.ID,
ChangeDate: curObj.InputDate.value,
Username: curObj.Username.value,
SomeFile: curObj.UploadFile
};
}
doAjax(){
let _ajaxData = this._ajaxData;
let request = new Request("ajax/saveUser.php", {
method : "POST",
headers: headers,
body : JSON.stringify(_ajaxData)
});
fetch(request).then(function (res) {
return res.json();
}).then(function (data) {
console.log(data);
});
}
}
PHP:
require_once __DIR__.'/../vendor/autoload.php';
$PDO = \DBCon::getInstance();
$data = json_decode(file_get_contents('php://input'));
$PDO->beginTransaction();
$_FILES["fileToUpload"]["name"]
$User = new \User();
$User->setUserID($data->UserID);
$User->setChangeDate($data->ChangeDate);
$User->setUsername($data->Username);
/**
* to use like with $_FILES["fileToUpload"]
*
* @param array $data->SomeFile
*/
$User->setUploadFiles($data->SomeFile);
$User->save();
try{
$PDO->commit();
echo true;
}catch(PDOException $e){
echo $e->getMessage();
}