From 2bac2744a50ccb09fb89dbd482bb4a0d73eeff68 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 12 Jun 2025 21:25:59 +0900 Subject: [PATCH] Convert Rhymix.ajax() into async function --- common/js/common.js | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/common/js/common.js b/common/js/common.js index 9033e49e2..0e9ef1b9e 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -402,7 +402,7 @@ Rhymix.modal.close = function(id) { * @param function error * @return void */ -Rhymix.ajax = function(action, params, success, error) { +Rhymix.ajax = async function(action, params, success, error) { // Extract module and act let isFormData = params instanceof FormData; @@ -453,7 +453,7 @@ Rhymix.ajax = function(action, params, success, error) { delete params._rx_csrf_token; } - // Generate AJAX parameters + // Define common AJAX arguments const args = { type: 'POST', dataType: 'json', @@ -462,19 +462,37 @@ Rhymix.ajax = function(action, params, success, error) { contentType: isFormData ? false : 'application/json; charset=UTF-8', processData: false, headers: headers, - success: function(data, textStatus, xhr) { - Rhymix._ajaxSuccessHandler(xhr, textStatus, action, data, params, success, error); - }, - error: function(xhr, textStatus, errorThrown) { - Rhymix._ajaxErrorHandler(xhr, textStatus, action, url, params, success, error); - } }; - // Send the AJAX request - try { - $.ajax(args); - } catch(e) { - alert(e); + // Split between Promise version and callback version + if ($.isFunction(success) || $.isFunction(error)) { + try { + $.ajax($.extend(args, { + success: function(data, textStatus, xhr) { + Rhymix._ajaxSuccessHandler(xhr, textStatus, action, data, params, success, error); + }, + error: function(xhr, textStatus, errorThrown) { + Rhymix._ajaxErrorHandler(xhr, textStatus, action, url, params, success, error); + } + })); + } catch(e) { + alert(e); + } + } else { + return new Promise(function(resolve, reject) { + const rejectWrapper = function(data, xhr) { + reject(data, xhr); + return false; + }; + $.ajax($.extend(args, { + success: function(data, textStatus, xhr) { + Rhymix._ajaxSuccessHandler(xhr, textStatus, action, data, params, resolve, rejectWrapper); + }, + error: function(xhr, textStatus, errorThrown) { + Rhymix._ajaxErrorHandler(xhr, textStatus, action, url, params, resolve, rejectWrapper); + } + })); + }); } };