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