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 action_parts = action.split('.');
var request_info; var request_info;
if (action === 'raw') { 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 { } else {
params = params ? ($.isArray(params) ? arr2obj(params) : params) : {}; params = params ? ($.isArray(params) ? arr2obj(params) : params) : {};
//if (action_parts.length != 2) return; //if (action_parts.length != 2) return;
@ -342,7 +347,7 @@
// Send the AJAX request. // Send the AJAX request.
try { try {
$.ajax({ var args = {
type: "POST", type: "POST",
dataType: "json", dataType: "json",
url: url, url: url,
@ -351,7 +356,11 @@
headers : headers, headers : headers,
success : successHandler, success : successHandler,
error : errorHandler error : errorHandler
}); };
if (params instanceof FormData) {
args.contentType = false;
}
$.ajax(args);
} catch(e) { } catch(e) {
alert(e); alert(e);
return; return;

View file

@ -415,6 +415,7 @@ function legacy_filter(filter_name, form, module, act, callback, responses, conf
args[0] = filter_name; args[0] = filter_name;
args[1] = function(f) { args[1] = function(f) {
var hasFile = false;
var params = {}, res = [], elms = f.elements, data = $(f).serializeArray(); var params = {}, res = [], elms = f.elements, data = $(f).serializeArray();
$.each(data, function(i, field) { $.each(data, function(i, field) {
var v = $.trim(field.value), n = field.name; 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; 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'; params['_rx_ajax_compat'] = 'XMLRPC';
exec_json(module + '.' + act, params, function(result) {
var callback_wrapper = function(result) {
if (!result) { if (!result) {
result = {}; result = {};
} }
@ -454,7 +464,17 @@ function legacy_filter(filter_name, form, module, act, callback, responses, conf
}); });
callback(filtered_result, responses, params, form); 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); v.cast('ADD_CALLBACK', args);