1 МБ данных раскрывающегося списка, необходимо загружать и отображать динамически - PullRequest
1 голос
/ 29 апреля 2011

Итак, у меня есть веб-сайт с двумя раскрывающимися списками HTML - один представляет собой список штатов США, а другой - список городов / населенных пунктов в выбранном штате.На данный момент у меня есть файл для каждого штата, и у всех них есть опции, перечисленные в следующем виде:

<option value="44.729932, -72.381758">Albany</option>
<option value="44.976728, -73.30257">Alburg</option>

Значение - это город / город.Я не могу загрузить все эти данные за один раз (ну, я думаю, что смогу, но это 1 МБ, и я обслуживаю страницу со скоростью 130 КБ / с ...), поэтому я хотел бы иметь способ, чтобы каждый город / городфайл загружен, как только выбрано его имя состояния ... Я сделал эти файлы в предположении, что я мог бы просто сделать это:

<select name="state" method="get" id="state">
     <option value="citiestowns/alabama.html">Alabama</option>
     <option value="citiestowns/alaska.html">Alaska</option>
</select>
<select id="cityortown" name="cityortown">
<?php
$state = $_GET['state'];

include("$state");
?>
</select>

Но когда я делаю это, я просто получаю выпадающий список состояний ипустой выпадающий список рядом с ним ... heeeeeelp!(

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Если я правильно понимаю, вам нужно показать правильный город на основе ранее выбранного штата?

Почему бы не использовать автозаполнение (например, jQueryUI). А ваш PHP-сервер будет анализировать ваши данные (PHP не будет отправлять пользователю 1 МБ, как это делается на стороне сервера).

Таким образом, вы возвращаете не более 10 результатов (когда пользователь вводит название своего города). Раскрывающийся список неэффективен для такого большого набора данных. Метод поиска / автозаполнения будет работать намного лучше ИМХО.

Справка:

1 голос
/ 29 апреля 2011

Возможно, вы захотите использовать AJAX для этого. Это техника, использующая PHP и Javascript, которая позволяет вашей странице получать новые данные с сервера без перезагрузки страницы. Это позволит вашей странице изначально получать только состояния с сервера, а затем получать соответствующие города и их данные из сценария PHP.

Итак, вам понадобится

  1. Первая HTML-страница. Может быть статическим или сгенерированным PHP, но потребуется некоторый javascript, чтобы после выбора состояния из раскрывающегося списка состояний генерировался раскрывающийся список города.

    a- Исходная HTML-страница с раскрывающимся списком состояний

    b- Javascript, описанный выше

  2. PHP-скрипт. Эта страница никогда не перейдет на «прямую» (скорее всего, вы не введете ее URL в браузер), но она будет целью запроса к серверу.

    Ввод - параметр, указывающий, в каком состоянии

    Output - выпадающий список городов, принадлежащих этому государству, и их значений.


Вы не указываете, в какой форме находятся ваши данные (я догадываюсь / надеюсь, что реляционная БД? БД документов не будет плохой, но CSV будет довольно сложной), но я постараюсь нарисовать грубый набросок описываемого мной PHP-скрипта на шаге 2.

getcities.php

<?php

$state = $_GET['state'];
$cityArray = getCityArray($state); //i won't delve into details here, but probably takes some database calls

echo "<select name='citySelect'>";
foreach($cityArray as $cur)
{
    list($x,$y,$name) = array($cur['x'].$cur['y'],$cur['name']); //this is just to make the next line simpler.  PHP extract function can do something similar too
    echo "<option value='$x,$y'>$name</option>";
}
echo "</select>";

?>

Вы можете видеть, как это создает раскрывающийся список выбора / опции только с необходимыми элементами.

Javascript будет ответственным за вызов чего-то вроде getcities.php?state='NY' и размещение вывода в элементе вашей страницы (вероятно, div)

Посмотрите основы Ajax, как это сделать. Такие библиотеки, как jQuery, могут значительно упростить Ajax.


РЕДАКТИРОВАТЬ - в ответ на ваши комментарии

Так что на своей странице вы можете сделать что-то вроде

<select name='state' id='stateSelect' onchange='loadCities()'>
    <option value='' select='selected'>Please select a state</option>
    <option value='alabama.html'>Alabama</option>
    OPTIONS FOR EACH STATE HERE
</selecT>

<select name='city' id='citySelect'> //blank initially.  gets filled when you pick a state
</select>

<script type='text/javascript'>

  function loadCities()
  {
    $('#citySelect').load($('#stateSelect').val()); //this assumes files in same place.  otherwise you might need to put a path here
  }
</script>

По сути, если формат такой, как вы описали, все, что вам нужно сделать, это загрузить содержимое определенного файла HTML в <select> i call citySelect выше. Это может быть сделано полностью с помощью javascript, и с использованием библиотеки jQuery это довольно тривиально.

0 голосов
/ 29 апреля 2011

Не зная, что происходит в остальной части вашей установки, похоже, что вы пытаетесь получить на сервере набор файлов, по одному для каждого состояния, который содержит все параметры выбора для этого состояния.Это правильно?Это трудный путь.

Вы уже используете JQuery на этом сайте?(Или у вас есть возможность использовать такую ​​библиотеку?) Тогда вы сможете довольно легко использовать автозаполнение.Смотрите здесь для более подробной информации и пример: http://docs.jquery.com/Plugins/autocomplete

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