Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

our $AUTHORITY = 'cpan:SUKRIA';
#ABSTRACT: a plugin for adding Ajax route handlers
$Dancer::Plugin::Ajax::VERSION = '1.3200';
use strict;
use Dancer ':syntax';
use Dancer::Exception ':all';
register 'ajax' => \&ajax;
hook before => sub {
if (request->is_ajax) {
content_type( plugin_setting->{content_type} || 'text/xml' );
}
};
sub ajax {
my ($pattern, @rest) = @_;
my $code;
for my $e (@rest) { $code = $e if (ref($e) eq 'CODE') }
my $ajax_route = sub {
# must be an XMLHttpRequest
if (not request->is_ajax) {
pass and return 0;
}
# disable layout
my $layout = setting('layout');
setting('layout' => undef);
my $response = try {
$code->();
} catch {
my $e = $_;
setting('layout' => $layout);
die $e;
};
setting('layout' => $layout);
return $response;
};
# rebuild the @rest array with the compiled route handler
my @compiled_rest;
for my $e (@rest) {
if (ref($e) eq 'CODE') {
push @compiled_rest, {ajax => 1}, $ajax_route;
}
else {
push @compiled_rest, {ajax => 1}, $e;
}
}
any ['get', 'post'] => $pattern, @compiled_rest;
}
register_plugin;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Dancer::Plugin::Ajax - a plugin for adding Ajax route handlers
=head1 VERSION
version 1.3200
=head1 SYNOPSIS
package MyWebApp;
use Dancer;
use Dancer::Plugin::Ajax;
ajax '/check_for_update' => sub {
# ... some Ajax code
};
dance;
=head1 DESCRIPTION
The C<ajax> keyword which is exported by this plugin allow you to define a route
handler optimized for Ajax queries.
The route handler code will be compiled to behave like the following:
=over 4
=item *
Pass if the request header X-Requested-With doesnt equal XMLHttpRequest
=item *
Disable the layout
=item *
The action built matches POST / GET requests.
=back
=head1 CONFIGURATION
By default the plugin will use a content-type of 'text/xml' but this can be overwritten
with plugin setting 'content_type'.
Here is example to use JSON:
plugins:
'Ajax':
content_type: 'application/json'
=head1 AUTHOR
This module has been written by Alexis Sukrieh <sukria@sukria.net>
=head1 AUTHOR
Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut