1

誰が私が間違っているのか教えてもらえますか? 私は、ユーザー グループに出入りするための簡単なシステムを作成しています。そのために、Dojo と Perl を使用しています。(もし私が自分のやり方でそれを行うことができれば、それはPHPになりますが、私はボスではありません。)

現時点では、Perl 用、JavaScript 用、CSS スタイル用の 3 つのファイルしか使用していません。

CGI スクリプトの開始は、次のようにさまざまな機能にルーティングされます。

if ($search = $cgi->param('psearch')) {
  dbConnect();
  jsonSearchPersons($search);
  dbDisconnect();
} elsif ($user_id = $cgi->param('person')){
  dbConnect();  
  create_form($user_id);
 dbDisconnect();
} elsif ($user_id = $cgi->param('saveuser')) {
  save_user();
} else {
  mainPage();
};
...
sub save_user {
  print $cgi->header(-type=>'text/plain',-charset=>'utf-8');
  print("success");
}

私が今抱えている問題は、Ajax 呼び出し (この URL: への呼び出し) を介してユーザーの新しいグループを保存したい場合ですusers.cgi?saveuser=xx。これは (私の観点では) POST 呼び出しである必要があるため、これを作成し、結果の HTML/テキストを a に追加しようとしました<div>が、機能しませんでした:

dojo.xhr.post({
  url: "/cgi-bin/users.cgi?saveuser="+user_id,
  content: {
    new_groups: group_ids.toString()
  },
  load: function(html_content){
    var element = document.getElementById("test_area");
    element.innerHTML = html_content;
  },
  error: function(){
    alert("An error has occured during the save of new user groups.");
  }
});

私がそれを行うとdojo.xhr.get();うまくいきますが、POSTでそれを行うと、ifステートメントのその部分を飛び越えてmainPage()関数を追加するだけです。Dojo と Perl の間で理解できない基本的なことはありますか? POST 呼び出しを受け入れるようにページを設定する必要がありますか? または、私は何を間違っていますか?

注: これは、Dojo と Perl を使用して作成した最初の「システム」です。(私は通常、すべてのUIを手作業で作成するPHP / jQueryのような人なので、ちょっと慣れていません。)

4

3 に答える 3

4

URL で渡す代わりに、 -object にsaveuser-parameter を追加してみてください。contentdojo.xhrPost

saveuser-parameter を GET として渡し、もう一方を POST として渡そうとしていますが、サーバー側の部分が混乱する可能性があります。

そのようにしてみてください:

dojo.xhr.post({
  url: "/cgi-bin/users.cgi",
  content: {
   new_groups: group_ids.toString(),
   saveuser: user_id
  },
  load: function(html_content){
    var element = document.getElementById("test_area");
    element.innerHTML = html_content;
  },
  error: function(){
    alert("An error has occured during the save of new user groups.");
  }
 });
于 2012-04-10T15:38:15.607 に答える
0

解決策を見つけました。

問題は私のjavascriptでした。perl スクリプトに投稿するときは、$cgi=new CGI; を使用します。そしてそのすべて。これは、GET 変数と POST 変数の両方を取り、それらを検証します。私のjavascript/dojoコードでは、GET変数でURLを使用し、POSTも作成しました。これは、perl が 2 つの変数型を見つけられなかった (または混合していた) ことを意味していました。$cgi->param('saveuser') は両方とも "saveuser" の GET と POST をフェッチするため (perl への変更は必要ありませんでした)、

dojo.xhr.post({
  url: "/cgi-bin/users.cgi",
  content: {
    saveuser: user_id,
    new_groups: group_ids.toString()
  },
  load: function(html_content){
    var element = document.getElementById("test_area");
    element.innerHTML = html_content;
  },
  error: function(){
    alert("An error has occured during the save of new user groups.");
  }
});

ちょっとおかしなバグですが、今はうまく機能しているのでうれしいです:D

于 2012-04-12T07:26:23.620 に答える
0

CGI.pm の 675 行目:

  # Some people want to have their cake and eat it too!
  # Uncomment this line to have the contents of the query string
  # APPENDED to the POST data.
  # $query_string .= (length($query_string) ? '&' : '') . $ENV{'QUERY_STRING'} if defined $ENV{'QUERY_STRING'};

笑わせられる !

于 2012-04-11T00:24:40.003 に答える