Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

mod_perl & ajax

by artemave (Beadle)
on Apr 10, 2007 at 20:32 UTC ( [id://609253]=perlquestion: print w/replies, xml ) Need Help??

artemave has asked for the wisdom of the Perl Monks concerning the following question:

Hi, all.

I'm exploring Apache2::Ajax and nothing seems to work. I'm using method handlers and I didn't find any docs on how to work with Apache2::Ajax that way. Any clues?
If anyone has an example of a controller working this way, I'd love to have a look.

Thanks in advance,
Artem A. Avetisyan

Replies are listed 'Best First'.
Re: mod_perl & ajax
by ides (Deacon) on Apr 10, 2007 at 21:38 UTC

    "Doesn't work" isn't enough information. What errors are you seeing?

    Frank Wiles <frank@revsys.com>
    www.revsys.com

      You are right.
      But the errors produced by Error.pm seem to be irrelevant.
      Ok, I'll post the workable code without Ajax and the same after putting some. Here we go:
      package dir_browse::dir_browse; use strict; use warnings; use Apache2::RequestRec; use Apache2::RequestIO; use Apache2::Const qw(:common); use Apache2::Reload; use File::Spec; use Error qw(:try); use Template; sub new { bless {} } sub handler : method { my ($self, $r) = @_; $Error::Debug = 1; $self = $self->new unless ref $self; $self->{r} = $r; try { my $websrc = $self->get_websrc; my $template = new Template({ INCLUDE_PATH => ["$websrc/src", "$websrc/lib"], INTERPOLATE => 1, OUTPUT => $self->{r}, }); $self->get_contents(File::Spec->rel2abs($self->{r}->path_info) +); $self->{r}->content_type('text/html'); throw Error(-text => "No path '$websrc'") unless -f "$websrc/s +rc/dir_browse.tt2"; $template->process('dir_browse.tt2', $self) or throw Error(text => $template->error()); } catch Error with { my $E = shift; $self->{r}->print($E->stacktrace); $self->{r}->log_error($E->stacktrace); return Apache2::Const::SERVER_ERROR; }; return Apache2::Const::OK; } ... 1;
      Now the one with Ajax:
      package dir_browse::dir_browse; use strict; use warnings; use Apache2::RequestRec; use Apache2::RequestIO; use Apache2::Const qw(:common); use Apache2::Reload; use Apache2::Ajax; use File::Spec; use Error qw(:try); use Template; sub new { bless {} } sub handler : method { my ($self, $r) = @_; $Error::Debug = 1; $self = $self->new unless ref $self; $self->{r} = $r; try { my $websrc = $self->get_websrc; my $template = new Template({ INCLUDE_PATH => ["$websrc/src", "$websrc/lib"], INTERPOLATE => 1, OUTPUT => $self->{r}, }); $self->get_contents(File::Spec->rel2abs($self->{r}->path_info) +); $self->{r}->content_type('text/html'); throw Error(-text => "No path '$websrc'") unless -f "$websrc/s +rc/dir_browse.tt2"; my $html; $template->process('dir_browse.tt2', $self, \$html) or throw Error(text => $template->error()); my $ajax = Apache2::Ajax->new($self->{r}, 'show' => sub {retur +n $html}) or throw Error(text => "DARN!! "); $self->{r}->print($ajax->build_html()); } catch Error with { my $E = shift; $self->{r}->print($E->stacktrace); $self->{r}->log_error($E->stacktrace); return Apache2::Const::SERVER_ERROR; }; return Apache2::Const::OK; } ... 1;
      And the httpd.confL
      PerlModule Apache2::Ajax ... PerlModule Apache2::dir_browse <Location /dir_browse> SetHandler perl-script PerlResponseHandler dir_browse::dir_browse </Location>
      And here is the error message I get when I rum this:
      Can't locate Apache2/Request.pm in @INC (@INC contains: C:\Program Files\ActiveState Perl Dev Kit 6.0\lib\ C:\cygwin\home\artem\perl_projects\web c:/Perl/site/lib c:/Perl/lib . C:/Program Files/Apache Software Foundation/Apache2.2) at c:/Perl/site/lib/Error.pm line 38 Error::throw_Error_Simple('HASH(0xc5f508)') called at c:/Perl/site/lib/Error.pm line 297 Error::subs::run_clauses('HASH(0xc5f4b4)', 'Can\'t locate Apache2/Request.pm in @INC (@INC contains: C:\P...', 'undef', 'ARRAY(0xc99978)') called at c:/Perl/site/lib/Error.pm line 416 Error::subs::try('CODE(0x107b1b0)', 'HASH(0xc5f4b4)') called at C:\cygwin\home\artem\perl_projects\web/dir_browse/dir_browse.pm line 55 dir_browse::dir_browse::handler('dir_browse::dir_browse', 'Apache2::RequestRec=SCALAR(0x107b15c)') called at -e line 0 eval {...} called at -e line 0

      I'm using the latest mod_perl2, ActiveState 5.8.8.819, WinXP SP2.

      Thanks a lot,
      Artem.
        One place that Apache2::Request is used is in CGI::Apache2::Wrapper, which Apache2::Ajax will use if available. If you've installed CGI-Apache2-Wrapper, did you also install libapreq2 (which provides Apache2::Request)?

        Hmmm, it appears something in your code is trying to use Apache2::Request ( aka libapreq2 not to be confused with Apache2::RequestRec, etc. ).

        Give this a try, "use Apache2::Ajax;" in your code, but don't actually call any of it's methods, etc. See if you can just load it up without getting that error.

        Frank Wiles <frank@revsys.com>
        www.revsys.com

Re: mod_perl & ajax
by Anonymous Monk on Apr 10, 2007 at 21:27 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://609253]
Approved by philcrow
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2024-04-19 14:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found