diff --git a/common/js/common.js b/common/js/common.js index 6f39d9933..75f86ed23 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -432,7 +432,7 @@ Rhymix.ajax = function(action, params, success, error) { dataType: 'json', url: url, data: params, - processData: (action !== null), + processData: (action !== null && !(params instanceof FormData)), headers : headers, success : function(data, textStatus, xhr) { Rhymix.ajaxSuccessHandler(xhr, textStatus, action, data, params, success, error); @@ -841,6 +841,16 @@ $(function() { } $('#rhymix_alert').on('click', rhymix_alert_close); + /** + * Intercept form submission and handle them with AJAX + */ + $(document).on('submit', 'form.rx_ajax', function(event) { + if (!$(this).attr('target')) { + event.preventDefault(); + Rhymix.ajaxForm(this); + } + }); + /** * Editor preview replacement */ diff --git a/common/js/xml_handler.js b/common/js/xml_handler.js index cdaf31e69..d9c12f07e 100644 --- a/common/js/xml_handler.js +++ b/common/js/xml_handler.js @@ -375,41 +375,31 @@ /** * Function for AJAX submission of arbitrary forms. */ - XE.ajaxForm = function(form, callback_success, callback_error) { - form = $(form); + Rhymix.ajaxForm = function(form, callback_success, callback_error) { + const $form = $(form); // Get success and error callback functions. if (typeof callback_success === 'undefined') { - callback_success = form.data('callbackSuccess'); - if (callback_success && window[callback_success] && $.isFunction(window[callback_success])) { + callback_success = $form.data('callbackSuccess'); + if (callback_success && $.isFunction(callback_success)) { + // no-op + } else if (callback_success && window[callback_success] && $.isFunction(window[callback_success])) { callback_success = window[callback_success]; } else { - callback_success = function(data) { - if (data.message && data.message !== 'success') { - rhymix_alert(data.message, data.redirect_url); - } - if (data.redirect_url) { - redirect(data.redirect_url); - } - }; + callback_success = null; } } if (typeof callback_error === 'undefined') { - callback_error = form.data('callbackError'); - if (callback_error && window[callback_error] && $.isFunction(window[callback_error])) { + callback_error = $form.data('callbackError'); + if (callback_error && $.isFunction(callback_error)) { + // no-op + } else if (callback_error && window[callback_error] && $.isFunction(window[callback_error])) { callback_error = window[callback_error]; } else { callback_error = null; } } - window.exec_json('raw', new FormData(form[0]), callback_success, callback_error); + Rhymix.ajax(null, new FormData($form[0]), callback_success, callback_error); }; - $(document).on('submit', 'form.rx_ajax', function(event) { - // Abort if the form already has a 'target' attribute. - if (!$(this).attr('target')) { - event.preventDefault(); - XE.ajaxForm(this); - } - }); /** * Empty placeholder for beforeUnload handler.