Added AJAX demo

master
Hauke D 7 years ago
parent e9fe2a7c7c
commit 58c06898b6

@ -8,6 +8,7 @@ Not yet released: v0.03-beta
- Fixed an issue with WebPerl::JSObject::toperl() - Fixed an issue with WebPerl::JSObject::toperl()
where JS objects were not being converted properly. where JS objects were not being converted properly.
- Added AJAX demo
- ... - ...

@ -1,10 +1,11 @@
#!/usr/bin/env perl #!/usr/bin/env perl
use warnings; use warnings;
use 5.0.26; use strict;
use FindBin; use FindBin;
use Plack::MIME; use Plack::MIME;
use Plack::Builder qw/builder enable mount/; use Plack::Builder qw/builder enable mount/;
use Plack::App::Directory (); use Plack::App::Directory ();
use Cpanel::JSON::XS qw/decode_json encode_json/;
# Demo Plack server for WebPerl # Demo Plack server for WebPerl
# run me with "plackup webperl.psgi" # run me with "plackup webperl.psgi"
@ -21,11 +22,30 @@ Plack::MIME->add_type(".wasm" => "application/wasm");
my $SERV_ROOT = $FindBin::Bin; my $SERV_ROOT = $FindBin::Bin;
my $app_ajaxtest = sub {
my $req = Plack::Request->new(shift);
my $rv = eval {
my $content = decode_json( $req->content );
# We can do anything we like here, like e.g. call Perl subs,
# read/write files on the server, etc. - for this demo we're
# just going to munge some data from the request.
$content->{hello} .= "The server says hello!\n";
$content; # return value from eval (must be a true value)
}; my $e = $@||'unknown error';
my $res = $req->new_response($rv ? 200 : 500);
$res->content_type($rv ? 'application/json' : 'text/plain');
$res->body($rv ? encode_json($rv) : 'Server Error: '.$e);
return $res->finalize;
};
builder { builder {
enable 'SimpleLogger'; enable 'SimpleLogger';
enable 'Static', enable 'Static',
path => qr/\.(?:html?|js|css|data|mem|wasm|pl)\z/i, path => qr/\.(?:html?|js|css|data|mem|wasm|pl)\z/i,
root => $SERV_ROOT; root => $SERV_ROOT;
Plack::App::Directory->new({root=>$SERV_ROOT})->to_app; mount '/' => Plack::App::Directory->new({root=>$SERV_ROOT})->to_app;
mount '/ajaxtest' => $app_ajaxtest;
} }

@ -54,6 +54,22 @@ $btn->click(sub {
print "You clicked the jQuery button!\n"; print "You clicked the jQuery button!\n";
} ); } );
$btn->appendTo( $jq->('#buttons') ); $btn->appendTo( $jq->('#buttons') );
# And a demo of AJAX using jQuery:
use Cpanel::JSON::XS qw/encode_json/;
use Data::Dumper;
my $data_out = { hello => "Hello, World!\n" };
$jq->ajax( '/ajaxtest', {
method => 'POST', # we're sending JSON in the POST body
data => encode_json($data_out),
} )->done( sub {
my $data_in = shift;
print "AJAX Success! Data: ", Dumper($data_in->toperl);
} )->fail( sub {
my ($jqXHR, $textStatus, $errorThrown) = @_;
print "AJAX Failed! ($errorThrown)\n";
} );
</script> </script>
<!-- Optional STDOUT/STDERR text area (if you don't use this, output goes to Javascript console) --> <!-- Optional STDOUT/STDERR text area (if you don't use this, output goes to Javascript console) -->

Loading…
Cancel
Save