Почему этот 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)

Решение

Если у вас есть доступ к Linux-серверу, вы можете настроить 'nc' (netcat) для прослушивания порта 80 и просмотра исходных запросов, которые вы получаете.

Я подозреваю, что это проблема на стороне сервера. Возможно, мешает какая-то конфигурация Apache? Извините, я ничем не могу вам помочь.

Возможно, ваши результаты не возвращаются ни 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/)) {