Лабораторная работа: Технология AJAX
Предположим у нас есть таблица, в которой порядка миллиона записей. Пользователю необходимо выбрать всего одну запись из таблицы (реализация отношения "один ко многим"). Выбор пользователя является всего лишь одним из этапов заполнения большой веб-формы.
Естественно, для того, чтобы пользователь мог выбрать нужную запись из миллиона, нужны какие-то средства поиска этой самой записи. Например, простой текстовый поиск по наименованию.
В традиционном веб-приложении для этой цели пришлось бы использовать отдельную страницу и сохранять остальные данные формы в сессии пользователя, либо разбивать процесс заполнения формы на несколько этапов. В AJAX-приложении дополнительная страница не нужна.
Выбор записи будет реализован с помощью двух элементов веб-формы. Первый элемент - это текстовое поле, где пользователь вводит ключевое слово. Оно отсылается на сервер, а тот возвращает только те строки из таблицы, которые удовлетворяют условию поиска. Ответ сервера (в виде списка) помещается в поле SELECT, в котором пользователь и сделает окончательный выбор. Таким образом, при отправке всей формы на сервер попадет выбранное в поле SELECT значение в виде ID записи из большой таблицы.
В HTML выглядеть это может так:
<input type="text"
onkeyup="lookup(this. value, 'id_select',
'http://localhost/cgi-bin/xmlhttp. cgi')" />
<select id="id_select" name="id_select">
<option selected="selected" value=""></option>
</select>
На любое событие KeyUp (отжатие кнопки) в текстовом поле вызывается функция lookup ('текст', 'id-selecta', 'url')
function lookup(text, select_id, url) {
// Получаем объект XMLHTTPRequest
if(! this. http) {
this. http = get_http();
this. working = false;
}
// Запрос
if (! this. working && this. http) {
varhttp = this. http;
// Если в текстовом поле менее трёх
// символов - не делаем ничего
if (text. length <3) return;
// добавляем закодированный текст
// в URL запроса
url = url + "? text="+encodeURIComponent(text);
// создаём запрос
this. http. open("GET", url, true);