我有一个复选框列表。我试图将选定的复选框列表传递给perl脚本。我使用folliwng代码获取复选框列表:
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元素。这样做的正确方法是什么?
答案 0 :(得分:0)
您正在将数组指定为hashkey值。这不起作用;你需要分配一个数组ref:
my $runSpec = {
TestCasesToRun => \@testCasesToRun
};
鉴于代码编译,我有一种感觉,你刚刚搞砸了Q中的示例 - 请将它们修复为准确反映您的代码,即使它们稍微不那么简短。
您的'tcs'参数是单个字符串(通过JS分配)。那么为什么你首先将param('tcs')的结果分配给一个数组呢?您的代码中是否有某个split
未包含在示例中?
您的转储包含数组引用中的数组引用。您需要详细说明TestCasesToRun
arrayref的预期结构,并显示在测试运行器中处理它的代码。
根据你上次的评论:
使用简单的逗号更改您的JavaScript代码以加入:checkedValue += ",";
将您的Perl分配更改为:our @testCasesToRun = split(/,/, $var->param("tcs"));