On Wed, Aug 15, 2012 at 11:37 AM, Martin Drasar <dra...@ics.muni.cz> wrote:
> I have used MakeClicky actions to extend the RT UI and now I would like > my extensions to do some ajax stuff on click. I would like to know, how > I can create new Mason component and set it as a valid target for the > ajax request. > > Any help is really appreciated. > If you want your AJAX to return JSON, you need to do the following: 1. Do all the work of building the return component in the <%init>. I make it a hashref called $ret. 2. In the "web" section of the file (the part that isn't enclosed in <%init> or other Mason tags: % $r->content_type('application/json'); % $m->clear_buffer; <% JSON::to_json( $ret, { utf8 => 1, allow_blessed => 1, convert_blessed => 1, } ) |n %> % $m->abort; 3. Declare as <%args> all the parameters you pass it 4. Turn off any inheritance with <%flags> inherit => undef </%flags> 5. Call it in your Javascript like so: jQuery.ajax({ type: 'POST', url: 'assign_ticket.mas', data: { 'ticketid': ticketId, 'assignTo': rt_user_id, 'reason': reason, 'currentUserId': <% $session{'CurrentUser'}->id %> }, dataType: 'json', traditional: true, success: changeStatusSuccessCallback, error: changeStatusErrorCallback }); function changeStatusSuccessCallback(json) { if (json.status == 'error') { alert('Error: ' + json.error_msg); } else { document.location.reload(true); } } function changeStatusErrorCallback(jqXHR, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); } I'll leave it to you to figure out something better to do with the return callbacks. -- http://www.linkedin.com/in/paultomblin http://careers.stackoverflow.com/ptomblin