【发布时间】:2012-04-22 21:31:28
【问题描述】:
谁能告诉我我做错了什么? 我正在创建一个简单的系统来让人们进出用户组,为此我正在使用 Dojo 和 Perl。 (如果我能按照自己的方式实现,那就是 PHP,但我不是老板。)
目前我只使用三个文件,一个用于 Perl,一个用于 JavaScript,一个用于 CSS 样式。
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/文本附加到 <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 创建的第一个“系统”。 (我通常是一个 PHP/jQuery 类型的人,他手工制作所有 UI,所以我对它有点陌生。)
【问题讨论】:
-
GET 使用 $ENV{QUERY_STRING},POST 读取 STDIN。 dojo 会做一些奇怪的事情吗,比如为帖子设置查询字符串?您可以通过打印 %ENV 并检查 QUERY_STRING 和 CONTENT_LENGTH 来调试它。对于 GET,应设置 QUERY_STRING,并且 CONTENT_LENGTH=0。对于 POST,QUERY_STRING 应为 '',CONTENT_LENGTH 应 > 0
-
这个我不知道。我要试试看。
标签: javascript ajax perl post dojo