2009-02-24 6 views
3

J'essaie de comprendre pourquoi je ne vois pas de paramètres avec $ .post ("/ url /", {wtf: 2}).Pourquoi jQuery.post ne fonctionne-t-il pas avec Perl CGI?

J'utilise cette 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") }); 

Quand je lance un .get de $ ("/ url", {wtf: 2}), je reçois les résultats que j'attendre et trouver wtf est 2 dans les journaux. Quand j'utilise $ .post ("/ url /", {wtf: 2}), je n'ai pas l'air de pour obtenir des params (juste un $ VAR1 = {postdata => undef} dans les logs).

Qu'est-ce qui me manque? Firebug révèle que: Transfer-Encoding est "chunked" et Content-Type est "application/x-www-form-urlencoded; charset = UTF-8". De plus, l'onglet Post semble montrer les arguments dans la requête, mais pas de joie de la part de CGI.

+0

Je dois dire que je l'ai essayé avec différentes versions de jquery et obtenir les mêmes résultats ... 1.1.4, 1.2.2 et 1.3.2. – jettero

+0

Mantra: utiliser les avertissements est * plus important * que d'utiliser strict. – ysth

+0

J'utilise des avertissements pendant que j'écris encore, mais je le laisse rarement pour le code de production. – jettero

Répondre

2

Si vous avez accès à une boîte de Linux, vous pouvez configurer « nc » (netcat) pour écouter le port 80 et de voir les demandes brutes vous Reçoit.

Je suppose que c'est un problème côté serveur. Peut-être que certaines configurations d'Apache interfèrent? Désolé, je ne peux pas être plus utile.

4

Pourrait être que vos résultats ne reviennent ni application/x-www-form-urlencoded ni multipart/form-data. CGI doc a ceci à dire à son sujet:

Si les données affichées ne sont pas de type application/x-www-form-urlencoded ou multipart/form-data, les données affichées ne seront pas traitées, mais plutôt être retourné tel quel dans un paramètre nommé POSTDATA. Pour le récupérer, utiliser le code comme ceci:

my $data = $query->param('POSTDATA'); 
+0

POSTDATA semble être vide aussi. – jettero

+0

Testez-vous le résultat de la carte ou testez-vous $ cgi-> param ("POSTDATA") lui-même?Si la valeur de POSTDATA est 'a = 1 & b = 2 & c = -3', cela n'aura aucune résolution dans les paires nom-valeur de l'objet de requête. – Axeman

1

J'avais le même problème, même si j'utilisais CGI :: Lite à la place.

Il s'avère que la fonction .post dans jquery semble remplacer le type de contenu du formulaire, même s'il a été défini explicitement. Un simple 'ngrep' a révélé à venir toujours par une:

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

problème était, le module CGI :: Lite attendait une exacte match seulement 'application/x-www-form-urlencoded' (c'est-à-dire sans le bit charset).

La modification de cette ligne de code d'une correspondance exacte à un match d'expression régulière fait CGI/Lite.pm choses pour moi:

#($content_type eq 'application/x-www-form-urlencoded')) { 
($content_type =~ /application\/x-www-form-urlencoded/)) { 
Questions connexes