0

我有一个复选框列表。我正在尝试将选定复选框的列表传递给 perl 脚本。我正在使用以下代码获取复选框列表:

function exec(){
    var checkedValue = "";  
    var inputElements = document.getElementsByTagName('input'); 
    for(var i=0; inputElements[i]; i++){ 
      if(inputElements[i].className==="chk" &&  
         inputElements[i].checked){ 
           checkedValue += inputElements[i].value;
           if (inputElements[i+1])
               checkedValue += ", ";
           else
               checkedValue += "";  
      } 
    } 

然后我将“checkedValue”传递给 perl 脚本,如下所示:

self.location='/cgi-bin/ATMRunJob.pl?tcs='+checkedValue;

在 perl 脚本中,我读取数组如下:

our @testCasesToRun = $var->param("tcs");

然后将其分配给哈希,如下所示:

my $runSpec = {

         TestCasesToRun    => @testCasesToRun
      };

但是,当我在浏览器中加载页面时出现以下错误:

Failed TestLimits() with error: [hash: k=TestCasesToRun, v=1,]:[array]:Value is not an array ref
In check against following TLS:
[
  'hr',
  {
    'OptDefaults' => {
      'JobRunningGroupName' => 'astbluetooth',
      'RunMode' => 'Queue',
      'CountTowardsReporting' => 1,
      'JobOwnerGroupName' => 'astbluetooth',
      'SelectSetupTeardown' => 1
    },
    'Optional' => {
      'TestCasesToRun' => [
        'ar',
        undef,
        undef,
        [
          'r',
          1,
          undef
        ]
      ],

我是 perl 和 CGI​​ 脚本的新手。我怎么能绕过这个错误?

注意:为简洁起见,所有代码片段都已缩短,但仍描绘了问题的本质。

编辑:我想做的是这个。用户从他想要执行的复选框列表中选择测试用例列表。我获取所有选定测试用例的测试用例 ID,并将其传递给 perl 脚本。在 perl 脚本中,我只需要将这些选定的测试用例 id 分配给 runspec 哈希中的 TestCasesToRun 元素。

这样做的正确方法是什么?

4

1 回答 1

0
  1. 您正在分配一个数组作为 hashkey 值。那是行不通的;你需要分配一个数组参考:

     my $runSpec = {
         TestCasesToRun    => \@testCasesToRun
     };
    

    鉴于代码已编译,我感觉您只是在 Q 中弄乱了您的示例 - 请修复它们以准确反映您的代码,即使它们会稍微不那么简短。

  2. 您的“tcs”参数是单个字符串(通过 JS 分配)。为什么你首先将 param('tcs') 的结果分配给一个数组?您split的代码中有没有包含在示例中的地方?

  3. 您的转储包含数组引用中的数组引用。您需要详细说明TestCasesToRunarrayref 的预期结构是什么,并在测试运行程序中显示处理它的代码。

根据您的最后评论:

  • 使用简单的逗号更改您的 JavaScript 代码以加入:checkedValue += ",";

  • 将您的 Perl 分配更改为:our @testCasesToRun = split(/,/, $var->param("tcs"));

于 2013-06-21T10:26:53.000 回答