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

Тема в разделе "JavaScript", создана пользователем danneo, 23 дек 2013.

Модераторы: ZiX
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Сейчас выбор города сделан также на ajax. Сначала выбирается страна, потом появляется список регионов, потом городов. Все регионы, города находятся в одной таблице.
    Нужно сделать чтобы пользователь вводил название города, а ему выводились варианты, как в vk, яндекс и т.п.. А когда выберет, появляется готовая строка, чтобы пользователь видел, что он выбрал: страна - регион - город.
    В инете нашел примеры.
    Вопрос в том, как это реализовать, чтобы не было нагрузки на сервер, БД?
    Пока в голове - таймер на 2-3 секунды после ввода в поле.
    Может быть еще файловый кэш использовать (в виде массива регионов). Только вот массив индексированный и многомерный. И как по нему искать, не знаю.
     
  2. yaski

    yaski

    Регистр.:
    21 фев 2010
    Сообщения:
    491
    Симпатии:
    292
    из этого скрипта можно выдрать https://www.nulled.cc/threads/246382/
    данные подгружаются с ipgeobase.ru
    \bff\modules\dev\tpl\def\ipgeobase.php
     
  3. SovaBarmak

    SovaBarmak Создатель

    Регистр.:
    2 июл 2012
    Сообщения:
    17
    Симпатии:
    6
    хз, а с чего вы взяли что будет большая нагрузка если делать без задержек и кеша у вас в списке миллионы городов?
     
  4. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    при вводе буквы делается запрос. А пока печатаешь фразу, это сразу несколько запросов. А если это делают сразу несколько пользователей?
    Я просто не знаю, что значит нагрузка на БД :) что она может...
     
  5. yaski

    yaski

    Регистр.:
    21 фев 2010
    Сообщения:
    491
    Симпатии:
    292
    гугл, например, обрабатывает скорость ввода первых трех символов - для обычных пользователей и для "программистов"
     
  6. Aserus

    Aserus Постоялец

    Регистр.:
    16 ноя 2013
    Сообщения:
    78
    Симпатии:
    4
    У таких монстров как яндекс и гугл мощности большие)) так что твой вариант с 2-3 сек( после вода и когда символов 3 и больше) самый оптимальный
     
  7. NDK13

    NDK13 Создатель

    Регистр.:
    31 авг 2012
    Сообщения:
    36
    Симпатии:
    14
    Для реализации есть удобный компонент jQuery Autocomplete. С точки зрения БД Перейти по ссылке а именно
    Зависит от количества записей в БД. Вообще я бы разделил на три таблицы - Страны, Регионы, Города со связкой по ИД. Мало того, поиск должен ускориться за счет уменьшения строк, но и за счет использования двух индексов - "ИД", "часть слова запроса"
     
  8. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Раньше было в трех таблицах. Это не подходит из-за последующего преобразования ссылок в ЧПУ. Поэтому было сделано все в одной таблице.

    А как происходит запрос после 3 символов? Например, я ввел 3 символа, выполнился поиск. А если еще 1 символ введу, снова поиск будет, ведь уже 4 символа в поле? Или нужно каждые 3 символа выполнять запрос?
     
  9. NDK13

    NDK13 Создатель

    Регистр.:
    31 авг 2012
    Сообщения:
    36
    Симпатии:
    14
    А в чем проблема с генерацией ЧПУ? Ее можно сделать динамически на том же JS, путем суммирования значения input-ов и транслитерации например.
    Для снижения нагрузки я бы сделал чтобы первый запрос отправлялся только после введения первых трех символов, а потом после каждого ввода.
     
    Последнее редактирование: 26 дек 2013
  10. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Формирование ссылок. В общем, долго объяснять: https://www.nulled.cc/threads/246744/#post-2212648