Ajax应用程序与perl后端-如何

Ajax applications with perl backend - how to?

本文关键字:如何 后端 perl 应用程序 Ajax      更新时间:2023-09-26

关于Perl+AJAX已经存在一些问题,比如这里、这里或这里以及其他一些问题。他们2岁多了,我希望能有一些新东西。

问题是:

  • 现在,使用Perl后端制作AJAX应用程序最受欢迎的方法是什么
  • 是否有一些活动和常用的Perl模块可以帮助构建基于AJAX的应用程序

一些东西,对于通常的工作流程:

 if clicked this button (or changed this field.. etc),
 POST these data to the server,
 read the JSON answer,
 and update this/these DIV(s) in a DOM... etc.

这个问题可以被归类为模糊的,但我真的迷失了,需要帮助:在Perl世界中,制作AJAX应用程序最常见的方法是什么,今天。

正在寻找一个帮助我构建浏览器端javascript的帮助模块

我发现了这些:

  • https://metacpan.org/pod/OpenThought
  • https://metacpan.org/pod/HTML::AjaxTags
  • https://metacpan.org/pod/CGI::Ajax(但这是基于CGI的,IMHO对Plack世界来说不是最好的)

这些模块已经好几年没有更新了。它们是否稳定且正在使用?或者它们被弃用了,还有更好的方法吗?(对于现代Perl技术,如Plack)。

更新

当我阅读答案时,我想主要问题可能是我的英语。我不知道如何正确地表达自己。

我知道Perl。也许我不是专家,但我写了几千行代码。我认识Dancer,并且已经在Mojo中编写了一些应用程序…:Lite。了解JSON{::XS},我知道AJAX是如何工作的。

现在(出于某种原因)我更喜欢使用Mason2,带有Mason::Plugin::RouterSimple和其他几个CPAN模块以及Moose。Catalyst和Jifty对我来说太大了。

回到问题上来:

我最喜欢的JS框架是jQuery,我在几个模式窗口、手风琴、选项卡等项目中使用它。

但是

我的主要问题正是Sisitic的答案。我不想写JavaScript。不喜欢它。(我不太了解它,讨厌每一种我必须写的语言,比如:var arr = new Array();而不是my @arr

因此,在寻找解决方案时,我如何最小化(或者在理想的情况下,完全消除)编写JavaScript代码的需要。不想写入我的模板

$('.clickableButton').click(function(e) {
      .... etc... etc..
)}

但类似于:

 $ajax->make_button( -onchange=>$url, -updatedom=>'#thisdiv", some_special_button_description_in_perl );
 $tohead .= $ajax->gen_libs();
 $tohtml .= $ajax->gen_html();
 $jsdocready .= $ajax->gen_jsinitcode();

我的模板中的An将只在头部输出$tohead(因此包括jQuery),$tohtml将进入正文,$jsdocready将作为JavaScriptinit代码进入正文末尾。

当然,以上是一个非常愚蠢的例子,但希望能说明我的意思。简单地说:理想的解决方案是(可能不存在)完全消除编写JavaScript的需要,只有Perl代码才能生成所需的JS。

因此,我提到了上述模块,特别是https://metacpan.org/pod/OpenThought,因为这些确实有助于最大限度地减少编写JavaScript。问题是,这些已经两年没有更新了;(不幸的是,我不认识其他人。

你没有得到答案的原因不仅仅是问题的模糊性。问题空间非常宽,并且有许多攻击角度。

让我们澄清一下,Ajax中的"x"不应该再被理解为XML。JSON显然更自然,不会遇到太多问题,所以我所有的建议都指向它

hobbs已经说对了。你根本不想太多地处理服务器端代码,而是采用一个框架。这并不是因为在Perl中处理Ajax很困难;这很琐碎。这是因为问题空间很快就会变得混乱,你最终会在无尽的小变化中重复你的代码。所以–

Perl/服务器端

这些最终都会让你快乐。他们都有一个学习曲线。还有其他选择,但这些都是最好的™。

  • Catalyst(Catalyst::View::JSON)
  • Dancer(Dancer::Serializer::JSON)
  • Mojolicus(对于HTML5/Websockets,更喜欢Mojolicous)

部署应基于Plack/PSGI。

花点时间真正学习Perl Ajax处理的核心:JSON(:XS),这样您就可以了解各种框架中的视图在背后的作用。

JavaScript/客户端

在这一点上,这本质上是财富的尴尬。

  • jQuery
    • 许多Perl黑客喜欢这个工具包;它似乎达到了Perl所达到的最佳点。我喜欢jQuery
  • Dojo
    • 我不是粉丝—他们在早期版本中拥有最糟糕的文档,并在删除过去存在的少量文档时破坏了兼容性;但它在当前版本中很受欢迎
  • MochiKit
  • MooTools
  • YUI
  • ExtJS
    • 这个与YUI相距甚远的分叉是客户端JS的800磅大猩猩。我个人不喜欢它,因为它没有优雅的退化,等等,但它受到了高度评价,看起来非常犀利

我个人不喜欢也不推荐原型,尽管我从未使用过它,但我也选择不把script.aculo.us列入名单。

还有很多其他令人惊叹的专业套装;例如Modernizr。当你研究JS时,考虑一下CSS3、HTML5等标准遵从性和前瞻性功能,以及多点触摸等扩展事件处理对你的工作有多重要。祝你好运,玩得开心。

更新:可能会引起更多兴趣

  • Jemplate–JavaScript中的模板
    • 催化剂::视图::模板
  • Jifty–偏航

查找"ajax"并不是您真正需要的。只需使用您选择的web框架,该框架具有良好的序列化功能,可以使用Accept标头等。例如Catalyst和Catalyst::Action::REST或Dancer。不要写写Javascript的Perl,它只会让你难过。

我使用CGI::Application作为我的基本框架,CGI:∶Application::Plugin::JSON将JSON数据返回到jQuery。

如果你想用Perl模块生成HTML代码,我建议你使用CGI.pm:

...
use strict;
use warnings;
#CGI is shipped along perl, I think
use CGI;
my $CGI = CGI->new();
my $return_string = '';
#From CGI documentation on CPAN
#http://search.cpan.org/~markstos/CGI.pm-3.55/lib/CGI.pm
$return_string .= $CGI->header;
$return_string .= $CGI->start_html('hello world');
$return_string .= $CGI->h1('hello world');
$return_string .= $CGI->button(-name    => 'button_name',
                               -value   => 'Click Me!',
                               #Javascript event if needed
                               -onClick => "do_something()"
                              );
$return_string .= $CGI->end_html;
print $return_string;

或者(因为我不喜欢后一种方法),你可以在perl上写它(自己手动生成):

use strict;
use warnings;
#Needed header, otherwise will return error
print "Content-type: text/html'n'n"; 
#return random number from 0 to 100
my $random_number = int(rand(101));
my $HTML_generated_string = qq|
<html>
 <head>
  <title>HTML generated manually with perl</title>
 </head>
 <body>
  <h1>Hello world</h1>
  Bla bla bla Heres the random number $random_number
 </body>
</html>
|;
print $HTML_generated_string;

除此之外,我不知道有什么额外的模块可以做这件事。我通常是手工做的,或者写一个模板(用CGI::Application)。

我认为你想要的东西不存在。如果不使用JavaScript,就无法编写AJAX应用程序。如果有人发明了一种不用JavaScript的JavaScript方法,这将是一个重大项目,而不是一个人的周末CPAN模块。

我建议重新思考您对JavaScript的看法。JavaScript是一种优秀的语言,JQuery也很棒。有很多糟糕的JavaScript代码,但也有好的JavaScript代码。就像Perl社区中有好的和坏的做法一样。我建议你保持开放的心态,重新审视JavaScript,并确保你真正了解其基础。有时,我对一门语言感到沮丧,就意味着我没有很好地学习它。

JavaScript世界中发生了一些非常酷的事情。我承认它是混乱和分散的,有很多不同的东西需要了解,这让人筋疲力尽,但也令人兴奋的是,有这么多事情正在发生。

您可能已经了解这些资源,但以防万一:FireBug、Mozilla Developer Network JavaScript文档和JavaScript Garden

请参阅cpan
上的Dancer::Plugin::Ajaxhttp://metacpan.org/pod/Dancer::Plugin::Ajax