Ajax-приложения с perl-сервером - как?

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

Вопросы:

  • Какой самый предпочтительный метод сегодня делает приложения 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).

UPDATE

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

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

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

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

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

НО

Моя основная проблема заключается именно в Sismetic ответе. Я не хочу писать 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 лет.; (К сожалению, я не знаю других.

Ответы

Ответ 1

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

Позвольте пояснить, что "x" в Ajax больше не следует понимать как XML. JSON, очевидно, более естественен и не страдает от почти столько же проблем, поэтому все мои рекомендации указывают на это.

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

Perl/Серверный

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

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

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

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

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

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

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

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

Обновление: возможно, интерес будет

Ответ 2

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

Ответ 3

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

Ответ 4

Если вы хотите сгенерировать 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).

Ответ 5

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

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

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

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