Ajax应用程序与perl后端-如何
Ajax applications with perl backend - how to?
关于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
- 如何将Angular 2用于各种网站&使用PHP作为后端的模块
- 如何在不重新加载URL的情况下查询Node.Js的后端并更新页面
- 如何使用python后端和web前端提供braintree客户端令牌
- 构建一个HTML小部件来嵌入付费内容-如何确保与后端的通信安全
- 如何断言后端端点已被调用
- 如何通过内容类型为“image/jpeg”的 AJAX 调用将画布图像从 GUI 保存到后端
- 如何使用 express.js 和 ember-cli 实现节点.js后端服务器
- 如何使用已经存在的 REST API 后端在 Angular 应用程序中实现登录系统
- 如何清晰地分离前端和后端逻辑
- 如何在前端和后端之间共享TypeScript/JavaScript
- 了解代码如何从前端流到后端
- 如何在我的服务器上创建javascript,该服务器使用该服务器上的后端,并将在另一个网站上使用
- 如何为REST API后端构建REST客户端前端
- 我如何使用后端预签名url使用其SDK将文件上传到AmazonS3
- Java后端和JavaScript前端,如何加入
- 如何处理对后端服务进行相同调用的多个浏览器脚本
- 如何将前端模型与后端数据库同步
- 如何从 c# 后端获取 JavaScript 值
- 如何将数据从 AngularJS 前端传递到 Nodejs 后端
- 如何从后端服务对数据进行排序