Ajax без визуальных эффектов или обучение за 1 день

Как и все, начав разбираться с Ajax, с утра накачал себе с интернета куча разных примеров и стал применять на себя.

Многие отпали по причине несовместимости с русским языком, другие по причине "кода в себе", когда было непонятно - где идёт клиентская часть, отвечающая за оформление, а где уже часть общения с сервером, такие примеры кстати ещё и весили не мало.

Задачей же моей была безболезненная вставка в готовый проект двух функций - поиска по справочнику и фоновый поиск уже имеющихся записей в справочнике при заполнении формы добавления (чтобы пользователь сразу мог увидеть, набивая название своего предприятия - нужно ли ему заполнять многочисленные поля, или такая запись уже есть)

Во второй половине дня скачал библиотеку JsHttpRequest. По ссылке подробно и просто рассказан принцип работы как Ajax, так и самой библиотеки.

Скачанные примеры сразу заработали. Я получил, что хотел от технологии - отослать запросом один массив и получить ответом другой. А уж с помощью JavaScript вставить в нужные места полученные результаты запроса не представляло сложности.


Пример функции поиска имеющихся записей в справочнике при добавлении предприятия:

На input, в который пользователь вводит название я банально повесил функцию <input... onKeyUp="p(this.form.nazv.value)" ...>, которая по вводу n-го символа вызывала уже функцию, отрабатывающую запрос. Конечно эта функция могла проверять что-то ещё..например является ли последним символом пробел или сделать таймер...

 

    function p(value)
    {
    if(value.length>2)doLoad(value);
    }



Функция по положительному if вызывает функцию doLoad(value)

 

    function doLoad(value) {
    // Create new JsHttpRequest object.
    var req = new JsHttpRequest();
    // Code automatically called on load finishing.
    req.onreadystatechange = function() {
    if (req.readyState == 4) {
    document.getElementById('result').innerHTML = req.responseText;
    }
    }
    // Prepare request object (automatically choose GET or POST).
    req.open(null, 'namelike.php', true);
    // Send data to backend.
    req.send( { q: value } );
    document.getElementById('result').innerHTML = "<img src=/images/loading.gif> Поиск похожих названий";

    }



Ответ в скрипте namelike.php просто выводится в пул, попадая в req.responseText , а с помощью .innerHTML вставляется в <div id="result">. Во время запроса всё тем же .innerHTML вставляется всеми любимый loading.gif:)



В заключение приведу неполную выписку возможностей библиотеки JsHttpRequest:

Кроссбраузерность
Работа с любыми кодировками (без перекодировки)
Закачка файлов
Передача многомерных структур
Совместимость с библиотекой prototype




Рекомендуем почитать

 

Добавить комментарий


Ваше имя:


Комментарий:


Введите: Картинка