Почему этот jQuery.post не работает с Perl CGI?
Я пытаюсь понять, почему я не вижу параметров с $ .post ("/ url /", {wtf: 2}).
Я использую этот Perl:
use strict;
use CGI;
my $cgi = new CGI;
print $cgi->header("text/javascript");
print "'no'";
use Data::Dumper;
warn Dumper({ (map {$_=>$cgi->param($_ )} $cgi->param), postdata=>$cgi->param("POSTDATA") });
Когда я выдаю $ .get ("/ url", {wtf: 2}), я получаю ожидаемые результаты и обнаруживаю, что wtf в журналах равно 2. Когда я использую $ .post ("/ url /", {wtf: 2}), мне кажется, что я вообще не получаю никаких параметров (только $ VAR1 = {postdata => undef} в журналах).
Что мне не хватает?
Firebug показывает, что: Transfer-Encoding «разбит на части», а Content-Type - «application / x-www-form-urlencoded; charset = UTF-8». Кроме того, вкладка Post, кажется, показывает аргументы в запросе, но не радует CGI.
Ответов (3)3
Возможно, ваши результаты не возвращаются ни application / x-www-form-urlencoded, ни multipart / form-data. В CGI doc говорится об этом:
Если POST-данные не относятся к типу application / x-www-form-urlencoded или multipart / form-data, то POST-данные не будут обработаны, а вместо этого будут возвращены как есть в параметре с именем POSTDATA. Чтобы получить его, используйте такой код:
my $data = $query->param('POSTDATA');
У меня была та же проблема, хотя вместо этого я использовал CGI :: Lite.
Оказывается, функция .post в jquery, похоже, переопределяет тип содержимого формы, даже если он был установлен явно. Простой 'ngrep' показал, что он всегда проявляется как:
application/x-www-form-urlencoded; charset=UTF-8
Проблема заключалась в том, что модуль CGI :: Lite ожидал точного совпадения только с «application / x-www-form-urlencoded» (то есть без бита кодировки).
Изменение этой строки кода с точного совпадения на совпадение регулярного выражения в CGI / Lite.pm заставило меня работать:
#($content_type eq 'application/x-www-form-urlencoded')) {
($content_type =~ /application\/x-www-form-urlencoded/)) {