значения выпадающего списка не отображаются

#javascript #html #json #perl

#javascript #HTML #json #perl

Вопрос:

Это очень странная проблема, с которой я сталкиваюсь на своей веб-странице. В настоящее время у меня есть выпадающий список, заполненный данными из базы данных с использованием perl и javascript, но в выпадающем списке не отображаются значения, которые я получаю из базы данных.

Код, который у меня сейчас есть, выглядит следующим образом:

 my $dataX = ${ConnectToDatabase($main::edsUGCar, $main::databaseEnv)};
$resultSet = $dataX->Execute("select vendor from dex_vendor_info group by vendor");

my @list_of_vendors;
while(!$resultSet->EOF) {
push @list_of_vendors, $resultSet->Fields("vendor")->Value;
    $resultSet->MoveNext;
}

$list_of_vendors_json = encode_json(@list_of_vendors);

print <<ONE;
<html>
<body>
<h4> Test Vendor Array Javascript </h4>

<p id="demo"</p>
<form id="myForm">
<select id="selectNumber">
<option>Choose a Vendor</option>
<script type="text/javascript" language="JavaScript">
var list_of_vendors = $list_of_vendors_json;
var select = document.getElementById("selectNumber"); 
for(var i = 0; i < list_of_vendors.length; i  ) {
    var opt = list_of_vendors[i];
    var el = document.createElement("option");
    el.text = opt;
    el.value = opt;
    select.appendChild(el);
}​
</script>
</select>
</form>
</body>
</html>
ONE
 

Источник HTML для вывода, когда я просматриваю элемент выпадающего списка, показывает:

 <SELECT id=selectNumber> <OPTION selected>Choose a Vendor</OPTION> 
<SCRIPT language=JavaScript type=text/javascript>
var list_of_vendors = ["3D Systems","3DSystems","3M"];
var select = document.getElementById("selectNumber"); 
for(var i = 0; i < list_of_vendors.length; i  ) {
    var opt = list_of_vendors[i];
    var el = document.createElement("option");
    el.text = opt;
    el.value = opt ;
    select.appendChild(el);
}
</SCRIPT>
 <OPTION value="3D Systems"></OPTION> # Info Missing here after the `>`
 <OPTION value="3DSystems"></OPTION>
 <OPTION value="3M></OPTION>
</SELECT>
 

Комментарии:

1. Включите use strict; и use warnings; в начало КАЖДОГО скрипта perl. Молодец, что касается последнего, но первое тоже действительно нужно, и вы уже достаточно долго, чтобы слышать это уже несколько раз.

2. Когда я разместил use strict свой веб-сайт, он перестал работать, поэтому я его удалил

3. use strict; предназначен для информирования вас о проблемах с вашим кодом. Вместо того, чтобы игнорировать проблемы, исправьте свой код!

4. @Miller Я понимаю концепцию строгого использования, но мне дали приложение для добавления функциональности в сценарий perl, который выполняется на другом сервере… У этого скрипта perl есть другой модуль perl, который он наследует и в настоящее время находится на другом сервере.

5. @koala421: нет причин, по которым ваше приложение не может быть закодировано use strict , независимо от того, от каких модулей оно зависит. С вашей стороны неуважительно просить о помощи, когда вы игнорируете самые простые доступные вам инструменты отладки. Также мало смысла помогать вам исправлять вещи, пока у вас это не будет на месте

Ответ №1:

Вы пробовали переместить скрипт из тега select? В DTD (HTML 4) указано, что теги выбора имеют следующую структуру:

 <!ELEMENT SELECT - - (OPTGROUP|OPTION)  -- option selector -->
 

Что в основном означает, что вы не можете пропустить открывающий или закрывающий <select> тег, а <select> тег может содержать только <optgroup> теги or <option> , ничего больше (нет <script> )

Комментарии:

1. Я только что попробовал это, и это все еще не дает мне правильного результата… Я думаю, что что-то не так с document.createElement("option") частью javascript, потому что я не получаю текстовую часть после > option тега in

2. Я скопировал вывод и попытался его просмотреть. В вашем выводе есть какие-то странные символы после закрывающей фигурной скобки, они действительно есть? Если я их удалю, все будет работать.

3. Да, это то же самое, что происходит со мной, поэтому это немного странно. Эти символы поступают из, я не знаю, откуда.. Я думал, что это как-то связано с использованием JSON…

4. Может быть, вы случайно ввели их, но ваш редактор их не показывает? Из вашего кода я не знаю, почему JSON будет иметь к этому какое-то отношение.

5. Я думаю, что моя проблема в том, что у меня есть мой charset фрейм, установленный как iso-8859-1 и JSON, который может использоваться UTF-8 , поэтому для поездки появляются фиктивные символы

Ответ №2:

В разделе:

 <script type="text/javascript">
    var list_of_vendors = $list_of_vendors_json;
    var select = document.getElementById("selectNumber"); 
    for(var i = 0; i < list_of_vendors.length; i  ) {
        var opt = list_of_vendors[i];
        var el = document.createElement("OPTION");
 

el.appendChild(document.createTextNode(opt)); <—Эта строка кода отсутствовала!

         el.text = opt
        el.value = opt
        select.appendChild(el);
    }
</script>
 

Спасибо CannibalGorilla за предложения…Ценю это.

Комментарии:

1. Решает ли этот ответ вашу проблему? Если это так, пожалуйста, отредактируйте его, чтобы сделать это более очевидным. Пожалуйста, также примите это как решение, как только сможете, чтобы другие могли видеть, что проблема закрыта.