从jquery获取多个select param值的问题,javascript返回perl cgi页面

时间:2010-09-20 12:43:52

标签: javascript perl jquery cgi

我一直在努力工作1个小时而没有这样的运气。任何帮助将不胜感激。

我有一个cgi脚本,用于创建这些选择参数值:

print "Please select a dkversion to compare : <br><br>";
print "<select name='dkversion' id='dkversion' size='6' multiple='multiple'>";
foreach my $values ('ASDF123GS v0.01 models eval QA <-> apple', 'ZXCV534GS v1.01 models eval QA <-> pineapple')
{
    print "<option value=\"" . $values . "\" >" . $values  . "</option>";
}
print "</select>";
print "</form>";

我有另一个使用jquery / javascript处理输入的html页面:

     var scalarstr = "";
     $("#dkversion :selected").each(function () {
        scalarstr += "dkselected=" + encodeURIComponent($(this).val()) + "&";
     });

     $.get("./scripts/modelQA_correlation.cgi?" +  scalarstr + "&menu_mode=2",function(data){ 
     });

回到cgi页面来处理多个选择,我做了一个输入的转储,并注意到它没有分隔值:

$VAR1 = { 'dkselected' => 'ASDF123GS v0.01 models eval QA <-> apple�ZXCV534GS v1.01 models eval QA <-> pineapple', 'menu_mode' => '2' }; 

为什么不将dkselected值分成两部分?

2 个答案:

答案 0 :(得分:1)

这里更安全的方法是让jQuery对字符串进行编码,让我们从<select>获取值,通过.serializeArray()将它们存储在数组中,然后将menu_mode添加到其中,像这样:

var params = $("#dkversion").serializeArray()​;
params.push({ name: 'menu_mode', value: '2' });
$.get("./scripts/modelQA_correlation.cgi", params, function(data){ });​

You can test it out here。这可以完成上面代码所做的一切,但我希望你会同意更简单,更容易维护。这可以通过将对象作为$.get() data选项传递,该选项在内部调用$.param()以获取最终字符串,因此您可以像在演示中一样自己测试/查看结果。

答案 1 :(得分:0)

如果您正在执行类似$args = CGI::Vars的操作,那么您将在CGI.pm处理多个值的方式上遇到怪癖。 You'll need to split the string on "\0" (null).

另一种方法是使用param方法:@vals = $q->param('dkversion');