js: Properly submit multipart/form-data

This is not IE <10 compatible. Fix follows. ;-)

refs #8758
This commit is contained in:
Johannes Meyer 2015-07-15 15:25:40 +02:00
parent f3c8f2229f
commit c1d9cde312
2 changed files with 31 additions and 6 deletions

View File

@ -199,6 +199,7 @@
var $form = $(event.currentTarget).closest('form');
var url = $form.attr('action');
var method = $form.attr('method');
var encoding = $form.attr('enctype');
var $button = $('input[type=submit]:focus', $form).add('button[type=submit]:focus', $form);
var $target;
var data;
@ -230,6 +231,10 @@
method = method.toUpperCase();
}
if (typeof encoding === 'undefined') {
encoding = 'application/x-www-form-urlencoded';
}
if ($button.length === 0) {
$button = $('input[type=submit]', $form).add('button[type=submit]', $form).first();
}
@ -266,14 +271,22 @@
url = icinga.utils.addUrlParams(url, dataObj);
} else {
data = $form.serializeArray();
if (encoding === 'multipart/form-data') {
data = new FormData($form[0]);
} else {
data = $form.serializeArray();
}
if (typeof autosubmit === 'undefined' || ! autosubmit) {
if ($button.length && $button.attr('name') !== 'undefined') {
data.push({
name: $button.attr('name'),
value: $button.attr('value')
});
if (data instanceof FormData) {
data.append($button.attr('name'), $button.attr('value'));
} else {
data.push({
name: $button.attr('name'),
value: $button.attr('value')
});
}
}
}
}

View File

@ -100,13 +100,25 @@
headers['X-Icinga-WindowId'] = 'undefined';
}
// This is jQuery's default content type
var contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
var isFormData = data instanceof FormData;
if (isFormData) {
// Setting false is mandatory as the form's data
// won't be recognized by the server otherwise
contentType = false;
}
var self = this;
var req = $.ajax({
type : method,
url : url,
data : data,
headers: headers,
context: self
context: self,
contentType: contentType,
processData: ! isFormData
});
req.$target = $target;