Patch exec_json() and related functions to support file uploads

This commit is contained in:
Kijin Sung 2024-10-08 23:25:03 +09:00
parent 0a625662f7
commit d45c116c56
2 changed files with 35 additions and 6 deletions

View file

@ -215,7 +215,12 @@
var action_parts = action.split('.');
var request_info;
if (action === 'raw') {
request_info = 'RAW FORM SUBMISSION';
if (params instanceof FormData) {
request_info = params.get('module') + '.' + params.get('act');
} else {
request_info = 'RAW FORM SUBMISSION';
}
console.log(request_info);
} else {
params = params ? ($.isArray(params) ? arr2obj(params) : params) : {};
//if (action_parts.length != 2) return;
@ -342,7 +347,7 @@
// Send the AJAX request.
try {
$.ajax({
var args = {
type: "POST",
dataType: "json",
url: url,
@ -351,7 +356,11 @@
headers : headers,
success : successHandler,
error : errorHandler
});
};
if (params instanceof FormData) {
args.contentType = false;
}
$.ajax(args);
} catch(e) {
alert(e);
return;

View file

@ -415,6 +415,7 @@ function legacy_filter(filter_name, form, module, act, callback, responses, conf
args[0] = filter_name;
args[1] = function(f) {
var hasFile = false;
var params = {}, res = [], elms = f.elements, data = $(f).serializeArray();
$.each(data, function(i, field) {
var v = $.trim(field.value), n = field.name;
@ -435,11 +436,20 @@ function legacy_filter(filter_name, form, module, act, callback, responses, conf
}
});
$(f).find('input[type=file][name^=extra_vars]').each(function() {
if (this.files && this.files[0]) {
params[this.name] = this.files[0];
hasFile = true;
}
});
if (confirm_msg && !confirm(confirm_msg)) return false;
//exec_xml(module, act, params, callback, responses, params, form);
params['module'] = module;
params['act'] = act;
params['_rx_ajax_compat'] = 'XMLRPC';
exec_json(module + '.' + act, params, function(result) {
var callback_wrapper = function(result) {
if (!result) {
result = {};
}
@ -454,7 +464,17 @@ function legacy_filter(filter_name, form, module, act, callback, responses, conf
});
callback(filtered_result, responses, params, form);
}
});
};
if (!hasFile) {
exec_json(module + '.' + act, params, callback_wrapper);
} else {
var fd = new FormData();
for (let key in params) {
fd.append(key, params[key]);
}
exec_json('raw', fd, callback_wrapper);
}
};
v.cast('ADD_CALLBACK', args);