проблемы с получением нескольких значений параметров select из jquery, javascript обратно на страницу perl cgi - PullRequest
1 голос
/ 20 сентября 2010

Я работал над этим в течение 1 часа без такой удачи.Любая помощь приветствуется.

У меня есть скрипт cgi, с помощью которого создаются следующие значения параметров select:

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>";

У меня есть другая html-страница, которая использует jquery / javascript для обработки входных данных:1006 *

     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' }; 

Почему неВыбранные значения разделены на две части ??

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Более безопасный подход здесь - позволить jQuery кодировать строку, давайте получим значения из <select>, сохраним их в массиве через .serializeArray(), затем добавим menu_mode , вот так:

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

Вы можете проверить это здесь . Это делает все, что делает ваш код выше, но я надеюсь, вы согласитесь намного проще и проще в обслуживании. Это работает путем передачи объекта в виде опции $.get() data, которая внутренне вызывает $.param(), чтобы получить окончательную строку, так что вы можете проверить / увидеть результат самостоятельно У меня в демке.

0 голосов
/ 20 сентября 2010

Если вы делаете что-то вроде $args = CGI::Vars, то вы сталкиваетесь с причудой в том, как CGI.pm обрабатывает несколько значений. Вам нужно разделить строку на "\0" (ноль).

Другой подход заключается в использовании метода param: @vals = $q->param('dkversion');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...