2010-04-06 2 views
0

У меня есть приложение на стороне клиента, которое отправляет некоторые данные через запрос POST AJAX (request.open("POST", url, flag)) на мой скрипт CGI на Perl.Как получить и ответить на запросы Ajax в Perl?

Как получить эти данные с помощью Perl и вернуть некоторые другие данные (ответ AJAX)?

ответ

4

Точно так же вы будете обрабатывать любой запрос POST. Вам нужен CGI-скрипт в url, который получает POST и возвращает все, что ожидает JavaScript. Единственное отличие от обычной POST-формы HTML - это Content-Type, который вы будете получать и передавать.

+0

Я знаю, как это работает, но я не очень хорошо знаком с Perl, поэтому я спрашиваю. «Точно так же вы будете обрабатывать любой запрос POST» - я понятия не имею, как обращаться с запросом POST с помощью Perl, это был мой вопрос. – Peterim

+1

@Peterim, тогда вы должны дать более подробную информацию о том, что вы пытаетесь выполнить. Есть много способов сделать это, и трудно понять, что рекомендовать, не зная больше о вашей ситуации. – cjm

2

Используйте сердечник CGI модуль. Например.

use strict; 
use warnings; 

use CGI; 

my $q = CGI->new; 
my $foo = $q->param('foo'); 

print $q->header; 
print "You said $foo"; 

Если ваше приложение будет большим и сложным, вы можете исследовать один из рамок веб-приложений на Perl, как CGI::Application или Catalyst.

+0

Это просто плохая консультация. Нет гарантии, что данные из XMLHttpRequest будут отформатированы как результат из HTML-формы. – 2010-04-06 21:37:10

+3

Правда, нет никакой гарантии, но все библиотеки Ajax по умолчанию используют кодировку формы, если вы не создаете свою собственную строку данных сообщения. Учитывая, что ОП не заявлял ничего об обратном, разумно предположить поведение по умолчанию. – friedo

+0

ОК, но ваш ответ не содержит каких-либо оговорок о том, где он может работать или может не работать. – 2010-04-07 01:04:33

0

Базовая модель сценариев CGI «считывается из STDIN, записывается в STDOUT». На этапе ввода переменная среды CONTENT_LENGTH дает длину в байтах, которая должна считываться с STDIN. На стадии производства, также необходимо отправить основные HTTP заголовки, которые минимально одна строка «Content-Type» с типом пантомимы, как text/html или text/plain и т.д. плюс пустая строка:

Content-Type: text/plain 

<your data starts here> 

В в случае XMLHttpRequest, вы полностью контролируете формат данных, поэтому, как вы анализируете ввод от STDIN, зависит от вас. Точно так же вы можете лежать в типе mime и отправлять все, что хотите, в ответ.

JSON - отличный формат для отправки данных с Perl на JavaScript.

-1
use CGI; 
my $q = CGI->new; 
my $xml = $q->param('POSTDATA');