Commit | Line | Data |
d0d292d4 |
1 | package Catalyst::Action::Serialize::JSONP; |
aeb7a0ae |
2 | use strict; |
3 | use warnings; |
4 | use MRO::Compat; |
5 | |
d0d292d4 |
6 | use base 'Catalyst::Action::Serialize::JSON'; |
7 | |
8 | sub execute { |
9 | my $self = shift; |
10 | my ($controller, $c) = @_; |
11 | |
12 | my $callback_key = ( |
13 | $controller->{'serialize'} ? |
14 | $controller->{'serialize'}->{'callback_key'} : |
15 | $controller->{'callback_key'} |
16 | ) || 'callback'; |
17 | |
18 | if ($c->req->param($callback_key)) { |
19 | $self->{_jsonp_callback} = $c->req->param($callback_key); |
20 | $c->res->content_type('text/javascript'); |
21 | } |
22 | $self->next::method($controller, $c); |
23 | } |
24 | |
25 | sub serialize { |
26 | my $self = shift; |
27 | my $json = $self->next::method(@_); |
28 | if ($self->{_jsonp_callback}) { |
29 | $json = $self->{_jsonp_callback}.'('.$json.');'; |
30 | } |
31 | return $json; |
32 | } |
33 | |
34 | 1; |