// Build a list of the elements to update, with the data associated to each one // The data could go in a custom "data" attribute, and could be used to represent // how the element should be rendered (e.g. it could contain the parameters for // a shortcode) var elements_to_update = {}; $('#some_element').each(function() { var $elem = $(this); elements_to_update[$elem.attr('id')] = $elem.data('your_custom_data'); }); // Prepare the Ajax request to update the element var ajax_url = 'some_ajax_url'; var ajax_args = { 'action': 'epo_get_addons', 'elements': elements_to_update } // Fetch the update elements via Ajax $.post(ajax_url, ajax_args, function(response) { // Debug console.log(response); // Update the elements on the page var new_elements = response.product_addons; for(var element_id in new_elements) { var html = new_elements[element_id]; $('#' + element_id).html(html); } // Trigger initialisation scripts (pseudo code) epo.init(); });