This commit is contained in:
Dennis Eichhorn 2020-02-02 15:50:43 +01:00
parent 061e803805
commit e4721c620c
2 changed files with 17 additions and 24 deletions

View File

@ -4,8 +4,8 @@ import { NotificationMessage } from '../../Message/Notification/NotificationMess
import { NotificationType } from '../../Message/Notification/NotificationType.js'; import { NotificationType } from '../../Message/Notification/NotificationType.js';
import { Request } from '../../Message/Request/Request.js'; import { Request } from '../../Message/Request/Request.js';
import { RequestMethod } from '../../Message/Request/RequestMethod.js'; import { RequestMethod } from '../../Message/Request/RequestMethod.js';
import { RequestType } from '../../Message/Request/RequestType.js';
import { Response } from '../../Message/Response/Response.js'; import { Response } from '../../Message/Response/Response.js';
import { ResponseType } from '../../Message/Response/ResponseType.js';
import { FormView } from '../../Views/FormView.js'; import { FormView } from '../../Views/FormView.js';
/** /**
@ -333,10 +333,9 @@ export class Form
self = this; self = this;
request.setData(form.getData()); request.setData(form.getData());
request.setType(ResponseType.JSON); request.setType(RequestType.FORM_DATA);
request.setUri(action ? action : form.getAction()); request.setUri(action ? action : form.getAction());
request.setMethod(form.getMethod()); request.setMethod(form.getMethod());
request.setRequestHeader('Content-Type', 'application/json');
request.setSuccess(function (xhr) request.setSuccess(function (xhr)
{ {
console.log(xhr.response); console.log(xhr.response);

View File

@ -359,21 +359,33 @@ export class FormView
/** /**
* Get form data * Get form data
* *
* @return {Object} * @return {FormData}
* *
* @since 1.0.0 * @since 1.0.0
*/ */
getData () getData ()
{ {
const data = {}, const data = {},
formData = new FormData(),
elements = this.getFormElements(), elements = this.getFormElements(),
length = elements.length; length = elements.length;
let value = null; let value = null;
for (let i = 0; i < length; ++i) { for (let i = 0; i < length; ++i) {
const id = FormView.getElementId(elements[i]);
if (id === null) {
continue;
}
if (elements[i].tagName.toLowerCase() === 'canvas') { if (elements[i].tagName.toLowerCase() === 'canvas') {
value = elements[i].toDataURL('image/png'); value = elements[i].toDataURL('image/png');
} else if (elements[i].tagName.toLowerCase() === 'input' && elements[i].type === 'file') {
const filesLength = elements[i].files.length;
for (let j = 0; j < filesLength; ++j) {
formData.append(id + j, elements[i].files[j]);
}
} else { } else {
if (typeof elements[i].value !== 'undefined') { if (typeof elements[i].value !== 'undefined') {
value = elements[i].value; value = elements[i].value;
@ -382,11 +394,6 @@ export class FormView
} }
} }
const id = FormView.getElementId(elements[i]);
if (id === null) {
continue;
}
// handle array data (e.g. table rows with same name) // handle array data (e.g. table rows with same name)
if (data.hasOwnProperty(id)) { if (data.hasOwnProperty(id)) {
if (data[id].constructor !== Array) { if (data[id].constructor !== Array) {
@ -399,26 +406,13 @@ export class FormView
} }
} }
// Create FormData
/**
* @todo Orange-Management/Modules#202
* Consider to use FormData
* Form data is currently submitted in two steps if it contains media files.
* 1. Upload media data
* 2. Submit form data
* Consider to use `FormData` in order to submit media files and form data at the same time.
*/
/*
const formData = new FormData(),
dataLength = data.length;
for (let key in data) { for (let key in data) {
if (data.hasOwnProperty(key)) { if (data.hasOwnProperty(key)) {
formData.append(key, data[key].constructor === Array ? JSON.stringify(data[key]) : data[key]); formData.append(key, data[key].constructor === Array ? JSON.stringify(data[key]) : data[key]);
} }
} */ }
return data; return formData;
}; };
/** /**