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

my $cgi = new CGI; my $pjx = new CGI::Ajax( 'exported_func' => \&perl_func ); print $pjx->build_html( $cgi, \&Show_HTML); sub perl_func { # returns output from database } sub Show_HTML # prints HTML page. { # i want to set ajax function calls on this list items # so when user click on news, news content from another html page # would get displayed in content div # same would happen for home find events list items <ul> <li>Home</li> <li>Find</li> <li>News</li> <li>Events</li> <li>Register</li> </ul> <hr> <div id="navigation"> <input id="q" type="text" size="15" name="query" value="" /> </br> <input type="submit" value="Find" onclick="exported_func( ['q'], ['con +tent'] );"> </div> div id="content">First display events. </div> #rest of HTML code return $html; }

This is current code of my demo page. Now what I want is if user clicks on any list items, it would generate an ajax call which would display new html data from another HTML page in div 'content '.

So I thought I could just write:

my $sec_pjx = new CGI::Ajax( 'exported_func' => \&sec_perl_func ); print $sec_pjx->build_html( $cgi, \&Show_HTML);

and in HTML:

<li id="sec_q" onclick="exported_func( ['sec_q'], ['content'] );">Register</a></li>

but this produces HTML content twice. One Ajax call is already handling perl_func. So what is correct method to achieve this.

Replies are listed 'Best First'.
Re: Per CGI::Ajax, different ajax functions on same page
by rpnoble419 (Pilgrim) on Jun 03, 2013 at 15:06 UTC

    That module is rather old. I would suggest that you bypass CGI::Ajax and use JQuery and write a catcher Perl app to process your data. Using this method allows you to scale your code using any number of the Perl Frameworks or by using old fashion CGI.pm. You also get the benefit of your javascript being usable across browsers.

      Thanks, I am aware of JQuery, and similar libraries, and also about PERL frameworks like Dancer and Catalyst. But want to do in old fashioned way, so that I can learn about how things works.
Re: Per CGI::Ajax, different ajax functions on same page
by Anonymous Monk on Jun 03, 2013 at 15:09 UTC

    but this produces HTML content twice.

    Say what?

    exported_func is supposed to be the name of the javascript function, how many do you have named exported_func?

      Thanks for looking into my code. But I didn't get you properly. So rephrasing my question below.

      my $pjx = new CGI::Ajax( 'exported_func' => \&perl_func ); print $pjx->build_html( $cgi, \&Show_HTML); # First ajax call my $sec_pjx = new CGI::Ajax( 'exported_func' => \&sec_perl_func ); print $sec_pjx->build_html( $cgi, \&Show_HTML); # Second ajax call

      Both this ajax calls produce different output on page. How do I combine them in single perl code file.