Ajax-приложения с бэкэндом Perl - как? - PullRequest
15 голосов
/ 30 мая 2011

Уже есть вопросы о Perl + AJAX, например здесь , здесь или здесь и некоторых других.Им больше 2 лет, и я надеялся на что-то новое.

Вопросы:

  • Какой сегодня самый предпочтительный метод создания приложений AJAX с бэкэндом Perl?
  • Есть ли какие-нибудь активные и часто используемые модули 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.

Этот вопрос можно классифицировать как расплывчатый, но я действительно потерял и ему нужна помощь в этом: какой самый распространенный способ создания AJAX-приложений в мире Perl, СЕГОДНЯ.

Ищите вспомогательный модуль, который поможет мне создать JavaScript на стороне браузера.

Я нашел их:

Эти модули не обновлялись в течение нескольких лет.Они стабильны и используются ?Или они устарели и есть какой-то лучший способ?(для современных технологий Perl - таких как Plack).

ОБНОВЛЕНИЕ

Когда я читаю ответы, я думаю, что главная проблема, вероятно, в моем английском.Я не знаю, как правильно выразить себя.

Я знаю Perl.Может быть, я не эксперт, но я написал несколько тысяч строк кода.Я знаю Dancer, и уже пишу несколько приложений на Mojo ... :: Lite.Знайте JSON {:: XS}, и я знаю, как работает AJAX.

Теперь (по некоторым причинам) я предпочитаю использовать Mason2 с Mason :: Plugin :: RouterSimple и несколькими другими модулями CPAN и Moose.Catalyst, Jifty слишком велики для моих нужд.

Вернуться к вопросу:

Мой любимый JS-фреймворк - jQuery, я использую его в нескольких проектах для модальных окон или аккордеонов, вкладок.и т.д.

НО

Моя главная проблема именно в ответе Сисметика.Я не хочу писать 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();

А в моих шаблонах будет выводиться только $tohead в головной части (так что включите jQuery),$tohtml войдет в тело, а $jsdocready войдет в конец тела как код инициализации JavaScript.

Конечно, вышеприведенный пример очень глупый, но, надеюсь, покажет, что я имею в виду.Просто: идеальное решение было (вероятно, не существует) полностью исключить необходимость написания JavaScript, только код на Perl, который будет генерировать необходимый JS.

Поэтому я упомянул вышеупомянутые модули, особенно https://metacpan.org/pod/OpenThought,потому что это действительно помогает минимизировать написание JavaScript.Проблема в том, что они не обновлялись в течение 2 лет.; (И, к сожалению, других я не знаю.

Ответы [ 6 ]

23 голосов
/ 01 июня 2011

Причина, по которой вы не получаете ответов, заключается не только в неопределенности вопроса. Проблемное пространство имеет ширину очень и множество углов атаки.

Давайте поясним, что «x» в Ajax больше не должен означать XML. JSON, очевидно, более естественен и не страдает от такого большого количества проблем, поэтому все мои советы будут на него направлены.

То, что Хоббс сказал, уже правильно. Вы вообще не хотите много возиться с серверным кодом, а просто используете фреймворк. Это не потому, что иметь дело с Ajax сложно в Perl; это тривиально Это потому, что проблемное пространство быстро запутывается, и вы в конечном итоге будете повторять свой код в бесконечных небольших вариациях. Так и Ndash;

Perl / на стороне сервера

Любое из них со временем сделает вас счастливым Все они имеют кривую обучения. Есть и другие варианты, но это Лучшие & trade;.

Развертывание ДОЛЖНО быть на основе Plack / PSGI .

Потратьте время, чтобы по-настоящему изучить ядро ​​обработки Ajax в Perl: JSON (:: XS) , чтобы вы знали, что делают представления в различных инфраструктурах под прикрытием.

JavaScript / Клиентская

На данный момент это, по сути, смущение богатством.

  • JQuery
    • Многим Perl-хакерам нравится этот комплект; Похоже, что это то же самое, что делает Perl. Я обожаю jQuery.
  • Dojo
    • Я не фанат & mdash; у них была самая плохая документация, возможная в ранних версиях, и она нарушила совместимость, удалив то, что раньше было маленькими документами & mdash; но в текущей версии он очень понравился.
  • MochiKit
  • MooTools
  • YUI
  • ExtJS
    • Эта, теперь отдаленная, вилка от YUI - горилла на 800 фунтов от JS на стороне клиента. Мне лично это не нравится из-за отсутствия изящной деградации и так далее, но это высоко ценится и очень остро смотрится из коробки.

Мне лично не нравится и не могу рекомендовать прототип , и хотя я никогда не использовал его, я также решил не включать script.aculo.us в список.

Также есть множество других удивительных специальных наборов; например, Modernizr . Когда вы смотрите на JS, подумайте, насколько важны соответствие стандартам и перспективные функции, такие как CSS3, HTML5, расширенная обработка событий, например мультитач. Удачи и веселья.

Обновление: возможно, дальнейший интерес

8 голосов
/ 01 июня 2011

Поиск «ajax» не совсем то, что вам нужно.Просто используйте веб-фреймворк по вашему выбору, который имеет хорошие возможности для сериализации, работы с заголовками Accept и т. Д. Например, Catalyst и Catalyst :: Action :: REST или Танцор .Не пишите Perl, который пишет Javascript, это только расстроит вас.

4 голосов
/ 31 мая 2011

Я использую CGI :: Application в качестве своей базовой инфраструктуры и CGI :: Application :: Plugin :: JSON для возврата данных JSON в jQuery.

1 голос
/ 03 июня 2011

Если вы хотите сгенерировать HTML-код с помощью модуля Perl, я бы рекомендовал 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).

0 голосов
/ 01 июня 2014

См. Dancer :: Plugin :: Ajax на cpan
http://metacpan.org/pod/Dancer::Plugin::Ajax

0 голосов
/ 07 июня 2011

Я не думаю, что то, о чем вы просите, существует. Вы не можете писать приложения AJAX без использования JavaScript. Если бы кто-то изобрел способ сделать JavaScript без JavaScript, это был бы крупный проект, а не модуль CPAN выходного дня одного человека.

Я предлагаю переосмыслить ваш взгляд на JavaScript. JavaScript - отличный язык, а JQuery - отличный. Там много плохого кода JavaScript, но есть и хороший код JavaScript. Также как в сообществе Perl есть хорошие и плохие практики. Я бы посоветовал вам непредвзято взглянуть на JavaScript и убедиться, что вы действительно хорошо знаете основы. Иногда мое разочарование по поводу языка просто означает, что я не очень хорошо его изучил.

В мире JavaScript происходят очень интересные вещи. Я признаю, что он хаотичен и децентрализован, и есть много разных вещей, о которых нужно знать, и это утомительно, но также интересно, что так много всего происходит.

Вы, вероятно, уже знаете об этих ресурсах, но на всякий случай: FireBug , Сеть разработчиков Mozilla JavaScript docs и JavaScript Garden

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...