Хранение данных
Вы должны хранить эту информацию в базе данных. Создайте одну или две таблицы для хранения этого типа информации для каждого пользователя в каждом поле.
Запрос на стороне клиента
Вы можете запросить базу данных со стороны клиента (через AJAX), когда пользователь начинает вводить текстовое поле. Если вы сделаете это, рекомендуется подождать, пока в поле появятся не менее 3 (ish) символов, прежде чем запрашивать предложения у сервера. Это немного уменьшает количество запросов и трафик между клиентом и сервером.
Я использую этот метод для полей, где имеется большое количество возможных совпадений с автоматическим предложением.
Кэширование
Если вы используете этот метод, вы можете оптимизировать процесс, кэшируя ответ в определенных ситуациях.
Предполагая, что запрос запускается только после того, как в текстовом поле появятся 3 символа, вы можете затем кэшировать весь результат. Любые дополнительные символы, добавленные в текстовое поле, не будут увеличивать количество возвращаемых результатов. Таким образом, вы можете просто продолжить фильтровать кэшированные результаты. Однако если пользователь удаляет персонажа, вы можете обновить кэш, чтобы убедиться, что у вас есть наиболее подходящие из доступных автоматических совпадений.
Предварительная загрузка на стороне сервера
На стороне сервера соберите все эти данные и отправьте их вместе с запросом страницы. (Вы можете поместить его как массив javascript где-нибудь, на который можно сослаться в событии onchange
текстового поля. Таким образом, вам не нужно делать никаких вызовов AJAX.
Похоже, это лучше для полей, где не будет большого количества возможных попаданий с автоматическим предложением.