我一直在努力工作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值分成两部分?
答案 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');