Для одного из моих проектов, над которым я сейчас активно работаю понадобилось сделать возможность выполнения длинных запросов с "обратной связью", т. е. с возможностью отсылки информации о ходе выполнения скрипта. Поскольку подключать к проекту какого-нибудь монстра типа JQuery ради одной этой возможности я посчитал нецелесообразным, решено было написать свою простую библиотеку, выполняющую эту функцию. результат я представляю вам в этом посте.
Протестирован в Firefox 3.5, Opera 10.10, Konqueror 4.3.5r0 и IE 7. Теоретически должен работать и в остальных браузерах, включая IE6 (а может и 5) и WebKit-based браузерах.
После подключения к веб-странице файла longreq.js становится доступен объект lreq, через который и происходит взаимодействие с библиотекой.
lreq.send(url, data, callback)
Отправляет запрос на адрес url с данными data с переданной функцией callback в качестве обработчика.
Параметры:
url - строка. Адрес скрипта, на который следует отправить запрос.
data - хэш. Хэш с GET-параметрами, передаваемыми в запросе. Преобразование ключей и значений производится вызовом метода .toString()
callback - функция. Функция, которая будет вызываться всякий раз, когда приходят данные с сервера. Подробное описание функции и аргументов приведено ниже.
lreq.sendForm(url, form, callback)
Отправляет форму form на адрес url с переданной функцией callback в качестве обработчика.
Параметры:
url - строка. Адрес скрипта, на который следует отправить запрос.
form - DOM-узел. Объект формы, которая будет отправлена.
callback - функция. Функция, которая будет вызываться всякий раз, когда приходят данные с сервера. Подробное описание функции и аргументов приведено ниже.
Замечание:
Форма может по умолчанию иметь обработчик, отличный от указанного в параметре url и он не будет потерян при отправке формы с помощью SALR.
Функция callback.
function callback(mode, jaData, htmlData)
Параметры:
mode - режим вызова функции.
0, если это первый вызов, произведенный функцией send() на стороне сервера
1, если это не первый вызов, произведенный функцией send() на стороне сервера
2, если это вызов во время завершения работы скрипта.
jaData - это данные, переданные в качестве аргумента функции LongRequest::send(). При mode == 2 всегда null
htmlData - это все данные, выведенные скриптом в браузер в обход функции LongRequest::send(). При моде != 2 всегда null
Замечание:
callback вызывается всегда хотя бы один раз когда серверный скрипт завершает работу с mode, равным 2.
После подключения файла longreq.php становится доступен статический класс LongRequest, через который происходит взаимодействие с библиотекой.
LongRequest::init()
Инициализирует работу с библиотекой, включает буферизацию вывода и пытается снять ограничение по времени выполнения скрипта.
Весь вывод, произведенный с этого момента и до завершения работы скрипта будет отправлен непосредственно перед завершением скрипта и передан в качестве аргумента htmlData в callback-функцию.
Longrequest::send($data)
Отправляет произвольные данные в браузер. Данные будут переданы callback-функции в качестве аргумента jsData.
Данные приводятся к JS-типам следующим образом:
♦ null - в null
♦ Число - в число.
♦ Строка - в строку.
♦ Массив - в хэш, все его элементы будут рекурсивно преобразованы согласно этим же правилам.
♦ Все прочее (объекты) - сериализованы функцией serialize() и представлены как строка.
Параметры:
$data - произвольный тип. Данные, которые будут переданы в браузер.
Прикрепленный файл | Размер |
---|---|
longreq.tar_.gz | 4.08 кб |
Совместим с Google Chrome?
Блин, как то до AJAX не могу дойти, сложный он, зараза.
Должен быть совместим.
Покажите проект, над которым работаете?
Заинтересовала отправка POST запросов, надо будет посмотреть прогу, спс ;-)
Как только доделаю, покажу :)
Буду рад увидеть ;-)
Отправить комментарий