从perl cgi动态输出json数据

时间:2012-11-08 14:56:35

标签: perl extjs cgi

我有一个简单的perl cgi,我在我的extjs项目中使用,写得像这样:

use JSON;

print "Content-type: application/json\n\n";

my $node_hash = {
data => [{
     "Week",1145,
         "Sev_Logged", "3_major"
},{
    "Week", 1146,
        "Sev_Logged", "4_minor"
}]};
print to_json($node_hash);

返回以json格式编写的数据,用于生成图表。 我还有一个包含组合框的表单,其值为:“3_major”和“4_minor”对应于“Sev_Logged”字段。 现在我想要的是,每当用户选择“4_minor”时,我的perl cgi将只返回1146周,因此我的图表将只包含1146周的数据。

这可能吗?怎么样? 谢谢

2 个答案:

答案 0 :(得分:3)

我不知道您的数据来自哪里,但您可以这样做:

use strict;
use warnings;
use CGI;
use JSON;

my $q = CGI->new;
print $q->header("application/json");

my $Sev_Logged = $q->param('Sev_Logged');

my $data = [
  {
    "Week" => 1145,
    "Sev_Logged" =>"3_major",
  },
  {
    "Week" => 1146,
    "Sev_Logged" => "4_minor",
  },
];

my $node_hash = {
  data => [
    grep { $_->{'Sev_Logged'} eq $Sev_Logged } @$data,
  ]
};
print to_json($node_hash);

您可以这样称呼它:GET script.pl?Sev_Logged=3_major


无论如何,我认为如果您已经传输了所有数据,则应该仅使用JavaScript在客户端进行过滤。我认为没有必要进行AJAX调用。

答案 1 :(得分:1)

我会use CGI来帮助解决这个问题。简而言之,您需要通过表单和GET或POST请求将组合框字段传递给此CGI脚本。然后,该CGI脚本需要通过参数读取组合框的值。如果使用CGI模块,则可以通过param方法获取参数。