Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > sql и JavaScript


Автор: MacTep 15.10.2009, 14:54
Доброго времени суток, друзья.

У меня такая проблема: есть выпадающий список типов, скажем, товаров:
1) игрушки;
2) книги;
3) продукты питания.

Оформлено это тегом <select></select> в обычной форме. Но данные в этот тег подставляются из базы данных посредством селекта, который добавляется к моему тегу в php-коде.

Как теперь можно сделать так, чтобы в зависимости от выбранного пункта выпадающего списка под ним появилась расшифровка того, что есть в этой группе? То есть у меня в базе есть табличка, в которой привязываются типа товаров к самим товарам, соответственно все товары на определенной группе мы можем легко получить. Только вот как совместить JavaScript с sql я не пойму. Ведь JavaScript отыгрывается на клиенте, а запросы выполняются на серваке...

Что здесь можно сделать?

Автор: bars80080 15.10.2009, 15:36
можно написать реакцию на выбор пункта:

<select onchange="reaction(this);">

дальше можно в обработчике реакции reaction(x) написать соответствующее поведение. вариантов тут может быть несколько:

1. перезагрузка страницы с get-параметром. в этом случае достаточно будет переписать php-скрипт, строящий этот селект и поясниловку под ним. при наличии get-параметра происходит дополнительный запрос в БД и вставляется характеристика
2. организовать в динамическом режиме. это уже надо читать ajax. отправляем запрос серверу на специальный скрипт с тем же get-параметром, он копается в базе и отдаёт нам полученный текст. далее мы его на страничке вставляем в нужное место

Автор: MacTep 16.10.2009, 06:55
Цитата(bars80080 @  15.10.2009,  15:36 Найти цитируемый пост)
1. перезагрузка страницы с get-параметром. в этом случае достаточно будет переписать php-скрипт, строящий этот селект и поясниловку под ним. при наличии get-параметра происходит дополнительный запрос в БД и вставляется характеристика

Можно вот этот способ подробнее расписать? Каким образом JavaScript реакция может помочь? Что она должна делать? Она просто выставляет get-параметр? Или как? Слегка недопонимаю ситуацию. Объясните, пожалуйста.

Автор: NLspieler 16.10.2009, 07:26
Цитата(MacTep @  16.10.2009,  06:55 Найти цитируемый пост)
Можно вот этот способ подробнее расписать? Каким образом JavaScript реакция может помочь? Что она должна делать? Она просто выставляет get-параметр? Или как? Слегка недопонимаю ситуацию. Объясните, пожалуйста.


Дело в том, что в JavaScript есть редирект.

Код

//Адрес скрипта: "http://someplace.com/index.php" ;

//К этому адресу можно добавить дополнительную информацию, которая будет передаватся скрипту.

kat = "Igrushki" ;
window.location = "http://someplace.com/index.php?kategoriya=" + kat  ; //Переход на страницу


//Гет информация будет доступна скрипту в массиве $_GET


Автор: MacTep 16.10.2009, 08:34
Дали вот такой еще пример: как реализация - нормально?

Код

<?php

if (isset($_GET['country_id'])) {
 $opts = '';
 $cities = array( 1 => 'Moskow', 2 => 'Omsk');
 foreach( $cities as $k => $v)
   $opts .= '<option value="'.$k.'">'.$v.'</option>';
 die( $opts );
}

?>


Код

<select name="country_id" onchange="ajax('?country_id=' + this.value, 'city_id');">.....</select><br/>
<select name="city_id" id="city_id"></select>

Автор: bars80080 16.10.2009, 13:16
Цитата(MacTep @  16.10.2009,  08:34 Найти цитируемый пост)
как реализация - нормально?

реализация может и нормальная, если есть функция ajax()




Автор: skyboy 16.10.2009, 14:07
Цитата(bars80080 @  15.10.2009,  14:36 Найти цитируемый пост)
вариантов тут может быть несколько:

третий вариант: сразу отдавать и список, и "пояснительный текст" клиенту, а в реакции по выбору пункта отображать тот или иной блок.

вообще, любая реакция на действия пользователя может быть:
а) сопровождаться перезагрузкой страницы(как бы переход по ссылке)
достоинство: раз это полноценный адрес, то можно на него поставить закладку, отправить другу по аське и т.д. Плюс, этот адрес индексируется поисковиками. плюс - высокая актуальность, т.е. человек всегда получает последнюю версию данных.
недостаток: при небольших изменениях мы передаем тонну траффика - информации из соседних блоков, которая не поменялась - лишняя нагрузка, лишний траффик.
б) не сопровождается перезагрузкой страницы:
общий недостаток - явный определенный адрес отсутствует, нельзя поставить закладку/скинуть ссылку, продвинуть в поисковике отдельную страницу тоже не получится - отдельной страницы нет.
Варианты реализации:
- либо ajax(запрос на сервер происходит незаметно для пользователя)
  достоинство: траффик минимален - запрашиваются/получаются только измененные блоки; актуальность высока - даже если человек страницу уже полгода держит открытой в браузере и не закрывает страницу, все равно - подгрузка блока с сервера достанет последнюю по времени информацию.
 недостаток: не индексируется поисковиками; javascript может не выполняться(мобильные браузеры, параноики) - и логика работать не будет;
- либо заранее включать всю информацию в страницу и средствами javascript только производить отображение/скрытие
 достоинство: информация индексируется поисковиками, хотя страница все-таки одна; со страницей можно работать и в отсутствие интернета; можно предусмотреть вариант для браузера с отключенным javascript'ом - в таком случае со страницей сможет работать и клиент без javascript'a
 недостатки: объем страницы может получиться слишком большим; актуальность информации зависит от времени последнего обновления страницы - не обновляли страницу в браузере полгода - данные будут полугодичной давности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)