JQuery Post Object и Perl CGI

1

с jquery, я пытаюсь отправить стандартный объект в perl cgi script

js var data:

{
 alias: ["a1","a2","a3"],
 ip: "127.0.0.1",
 name: "name",
 port: "80",
}

js jquery post:

'$.post('/vhosts.cgi',{action: 'save',data: data);'

Perl:

my $q = CGI->new;
print Dumper($q->param('data'));

результат - самосвал пуст; Дамп $ q показывает, что именами параметров являются data[ip],data[name] т.

Хранитель ($ д):

$VAR1 = bless( {
             '.parameters' => [
                                'action',
                                'data[name]',
                                'data[ip]',
                                'data[port]',
                                'data[alias][]'
                              ],
             'data[alias][]' => [
                                  'a1',
                                  'a2',
                                  'a3'
                                ],
             '.charset' => 'ISO-8859-1',
             'data[ip]' => [
                             '127.0.0.1'
                           ],
             'data[port]' => [
                               '80'
                             ],
             'action' => [
                           'savevhost'
                         ],
             'data[name]' => [
                               'name'
                             ],
             '.fieldnames' => {},
             'escape' => 1
           }, 'CGI' );

Как я могу получить data как объект или хэш в perl?

  • 0
    Показать точный вывод объекта $q .
  • 0
    проверьте отредактированный вопрос
Показать ещё 2 комментария
Теги:
cgi

1 ответ

2
Лучший ответ

Если вы не хотите писать собственную утилиту анализатора для структур data[...] -like и беспорядок с проблемами unicode и т.д., Вам лучше использовать кодирование/декодирование JSON:

Сторона клиента:

$.post('/vhosts.cgi',{action: 'save',data: JSON.stringify(data, null, 2));

Серверная сторона:

use CGI;
use JSON;
use Data::Dumper;

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

print Dumper $data;

Я не думаю, что это так сложно.

  • 0
    Я просто сделал то же самое :) Просто удивился, почему Perl-CGI не так
  • 0
    Это не CGI.pm, это jQuery, который сериализует объекты JS особым образом: перейдите на консоль Chrome, попробуйте $.post("/foo", {data: { alias: ["a1","a2","a3"], ip: "127.0.0.1", name: "name", port: "80", }}); Затем перейдите на вкладку Сеть и посмотрите, что на самом деле было отправлено на сервер.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню