с 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?
Если вы не хотите писать собственную утилиту анализатора для структур 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;
Я не думаю, что это так сложно.
$.post("/foo", {data: { alias: ["a1","a2","a3"], ip: "127.0.0.1", name: "name", port: "80", }});
Затем перейдите на вкладку Сеть и посмотрите, что на самом деле было отправлено на сервер.
$q
.