Как сделать ввод в input с подсказкой на ajax

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Сейчас выбор города сделан также на ajax. Сначала выбирается страна, потом появляется список регионов, потом городов. Все регионы, города находятся в одной таблице.
Нужно сделать чтобы пользователь вводил название города, а ему выводились варианты, как в vk, яндекс и т.п.. А когда выберет, появляется готовая строка, чтобы пользователь видел, что он выбрал: страна - регион - город.
В инете нашел примеры.
Вопрос в том, как это реализовать, чтобы не было нагрузки на сервер, БД?
Пока в голове - таймер на 2-3 секунды после ввода в поле.
Может быть еще файловый кэш использовать (в виде массива регионов). Только вот массив индексированный и многомерный. И как по нему искать, не знаю.
 
из этого скрипта можно выдрать Для просмотра ссылки Войди или Зарегистрируйся
данные подгружаются с ipgeobase.ru
\bff\modules\dev\tpl\def\ipgeobase.php
 
хз, а с чего вы взяли что будет большая нагрузка если делать без задержек и кеша у вас в списке миллионы городов?
 
хз, а с чего вы взяли что будет большая нагрузка если делать без задержек и кеша у вас в списке миллионы городов?
при вводе буквы делается запрос. А пока печатаешь фразу, это сразу несколько запросов. А если это делают сразу несколько пользователей?
Я просто не знаю, что значит нагрузка на БД :) что она может...
 
гугл, например, обрабатывает скорость ввода первых трех символов - для обычных пользователей и для "программистов"
 
У таких монстров как яндекс и гугл мощности большие)) так что твой вариант с 2-3 сек( после вода и когда символов 3 и больше) самый оптимальный
 
Для реализации есть удобный компонент jQuery Autocomplete. С точки зрения БД Для просмотра ссылки Войди или Зарегистрируйся а именно
MySQL применяет индексы также для сравнений LIKE, если аргумент в выражении LIKE представляет собой постоянную строку, не начинающуюся с символа-шаблона. Например, следующие команды SELECT используют индексы:

mysql> SELECT * FROM tbl_name WHERE key_col LIKE "Patrick%";
mysql> SELECT * FROM tbl_name WHERE key_col LIKE "Pat%_ck%";
Зависит от количества записей в БД. Вообще я бы разделил на три таблицы - Страны, Регионы, Города со связкой по ИД. Мало того, поиск должен ускориться за счет уменьшения строк, но и за счет использования двух индексов - "ИД", "часть слова запроса"
 
Для реализации есть удобный компонент jQuery Autocomplete. С точки зрения БД Для просмотра ссылки Войди или Зарегистрируйся а именно
Зависит от количества записей в БД. Вообще я бы разделил на три таблицы - Страны, Регионы, Города со связкой по ИД. Мало того, поиск должен ускориться за счет уменьшения строк, но и за счет использования двух индексов - "ИД", "часть слова запроса"
Раньше было в трех таблицах. Это не подходит из-за последующего преобразования ссылок в ЧПУ. Поэтому было сделано все в одной таблице.

А как происходит запрос после 3 символов? Например, я ввел 3 символа, выполнился поиск. А если еще 1 символ введу, снова поиск будет, ведь уже 4 символа в поле? Или нужно каждые 3 символа выполнять запрос?
 
А в чем проблема с генерацией ЧПУ? Ее можно сделать динамически на том же JS, путем суммирования значения input-ов и транслитерации например.
Для снижения нагрузки я бы сделал чтобы первый запрос отправлялся только после введения первых трех символов, а потом после каждого ввода.
 
Последнее редактирование:
Назад
Сверху