js: Properly submit multipart/form-data
This is not IE <10 compatible. Fix follows. ;-) refs #8758
This commit is contained in:
parent
f3c8f2229f
commit
c1d9cde312
|
@ -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')
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue