Почему этот jQuery.post не работает с Perl CGI? - PullRequest
3 голосов
/ 25 февраля 2009

Я пытаюсь выяснить, почему я не вижу параметров с $ .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 ]

4 голосов
/ 25 февраля 2009

Возможно, ваши результаты не будут возвращены ни application / x-www-form-urlencoded, ни multipart / form-data. CGI doc может сказать об этом:

Если данные POSTed не относятся к типу application / x-www-form-urlencoded или multipart / form-data, то данные POSTed не будут обрабатываться, а вместо этого будут возвращены как есть в параметре с именем POSTDATA. Чтобы получить его, используйте код, подобный следующему:

    my $data = $query->param('POSTDATA');
2 голосов
/ 07 сентября 2011

У меня была такая же проблема, хотя вместо этого я использовал CGI :: Lite.

Оказывается, что функция .post в jquery, кажется, переопределяет тип содержимого формы, даже если он был задан явно. Простой 'ngrep' показал, что он всегда выглядит так:

application/x-www-form-urlencoded; charset=UTF-8 

Проблема была в том, что модуль CGI :: Lite ожидал точное совпадение только с 'application / x-www-form-urlencoded' (т.е. без бита charset).

Изменение этой строки кода с точного соответствия на совпадение с регулярным выражением в CGI / Lite.pm заставило меня работать:

#($content_type eq 'application/x-www-form-urlencoded')) {
($content_type =~  /application\/x-www-form-urlencoded/)) {
2 голосов
/ 26 февраля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...