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
Ответ 6
Смотрите Dancer:: Plugin:: Ajax на cpan
http://metacpan.org/pod/Dancer::Plugin::Ajax