通过AJAX请求迭代Perl数组

时间:2017-01-23 03:23:03

标签: arrays perl catalyst

我正在研究Catalyst数据库项目并试图通过jQuery做一些AJAX请求。参数正在发送,如图1所示。

List of parameters and values received in AJAX request

请注意,“diagn”和“type_consents”(及其对应的日期)都是作为值数组(值1,值2,...值n)发送的。

现在对于服务器端处理,Catalyst::Request允许通过$req->parameters轻松检索数据,但它似乎对我不起作用。

我这样做:

my $params = $c->request->parameters; #Retrieving all parameters

my @type_consents         = $params->{type_consent};
my @date_consents         = $params->{date_consent};
my @diagnosis             = $params->{diagnosis};
my @date_diagnosis        = $params->{date_diagnosis};

然后我需要循环这些数组并为每对值(diagnosis|date , consent|date)插入一个。另外,我需要存储和处理所有事务并在eval()块中一次执行所有事务,所以我这样做:

my %transactions;

# Diagnosis
my $diag_index = 0;

foreach my $key ( 0 .. $#diagnosis ) {
    $transactions{diagnosis}{$diag_index} = $diagnosis_mod->new(
        {
            subject_id          => $subject_id,
            diagnosis_date      => $date_diagnosis[$key],
            diagnosis           => $diagnosis[$key],
            diagnosis_comment   => "",
            suggested_treatment => ""
        }
    );

    print STDERR "\n" . $date_diagnosis[$diag_index];
    print STDERR "\n DEBUG: $date_diagnosis[$diag_index] | $diagnosis[$diag_index] | key: $diag_index";
    print STDERR "\n DEBUG2:" . Dumper( @date_diagnosis ) . " | " . Dumper( @diagnosis );

    $diag_index++;
}

# I'm avoiding evaluating and performing the transactions so neither eval() nor database impact are shown above.

这些调试打印以下内容:

Debugs of array iteration

这是否表明我的“数组”只是一个带字符串的一维变量?我尝试拆分它,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

您可以在哈希中存储的唯一值是标量。因此,$params->{type_consent}是标量,而不是列表。但是,由于对事物(标量,数组,散列,对象,整形等)的引用也是标量,因此可以将参考存储在散列中。

因此,$params->{type_consent}是对数组的引用,而不是对数组或列表本身的引用。

我认为您想要的是将其分配给my $type_consent = $params->{type_consent};,然后使用@$type_consent作为您的数组(因此它们都指向同一个数组 - 通过{{1更改某些内容更改@$type_consent),中的数组,通过说%$params来复制数组。

我选择使用的是情境,但如果没有理由复制它,我倾向于使用参考选项,以保持内存使用率下降。