http://blagtalkan.ru
http://oktpoisk.ru
http://mysorru.ru/
http://san-okt.ru/
http://pes6evolution.ru/
http://chasikigov.ru
http://serafimsovet.ru
http://filmsgov.ru
http://free-domen.ru
http://fithonda.ru/forums/index.php
http://avtogov.ru
http://www.1001bilet.com.ua/base/on-line/
http://pravilavoini.ru
http://school41ufa.ru
http://rusrav4.ru
Методы взаимодействия с сервером | Книга AJAX
 

Приложение AjaxMail предусматривает два различных способа взаи¬модействия с сервером: с помощью объекта XMLHttp и с помощью скры¬того фрейма. Оба способа реализованы в виде методов, заключающих в себе большую часть функциональных возможностей, что позволяет вызывать их из других функций напрямую.
Все запросы типа GET, выполняемые с помощью объекта XMLHttp, про¬изводятся методом request(). Этот метод принимает три аргумента: выполняемую операцию, ссылку на функцию обратного вызова, кото¬рая будет вызвана по завершении запроса, и необязательный числовой идентификатор сообщения. Все запросы, исполняемые этим методом, отправляются сценарию AjaxMailAction.php, которому в виде первого параметра строки запроса передается тип запрашиваемой операции. Ниже приводится полный исходный код метода:
request: function (sAction, fnCallback, sld) { if (this.processing) return;
this.setProcessing(true); .
var oXmlHttp = zXmlHttp.createRequestO;
var.sURL = sAjaxMailURl + "?folder=" +this.info.folder + "&page="
+ this.info.page + "&action=" + sAction;
sURL += "&id=" + sld;

oXmlHttp.open("get-', sURL, true); oXmlHttp.onreadystatechange = function (){ try {
if (oXmlHttp.readyState == 4) { if (oXmlHttp.status == 200) {
fnCallback(oXmlHttp.responseText); } else {
throw new Еггог("Возникла ошибка при попытке " +"соединения с сервером." +"0перация (" + sAction + ") " +"не была выполнена.");'

} catch (oException) {
oMailbox.showNotice("error", oException.message);

oXmlHttp.send(null); } catch (oException) {
this.showNotice("error", oException.message);

Обратите внимание: в первой строке проверяется занятость почтового ящика обработкой другого запроса. Если посланный запрос еще не завершен, функция сразу же возвращает управл выполнения нового запроса. В противном случае реализуется с ная схема выполнения запроса через объект XMLHttp, основанная на струкции try...catch. Прежде чем что-либо предпринять, вызыва тод setProcessing(), чтобы зафиксировать факт начала обработки запроса. Затем к URL сервера добавляется строка запроса, соде: идентификатор текущей папки, номер страницы и название в мой операции. Если задан идентификатор сообщения (sID), то он добавляется в строку запроса. После этого выполняется иниц» ция объекта XMLHttp и устанавливается обработчик события опгеас echange. В случае успешного завершения запроса обработчик выполняет обращение к функции обратного вызова, которой и ется текст ответа. Если же возникла какая-либо ошибка, то в ется исключение. При возникновении исключительных с в блоке catch с помощью метода showNotice() выводится уведомл
Метод отправки электронных писем очень похож на пред с той лишь разницей, что формирует запросы типа POST:
sendMail: function () {
if (this.processing) return; this.divComposeMailForm.style.display = "none";
this.divComposeMailStatus.style.display - "block"; try {
this. setProcessing(true);
var oXmlHttp = zXmlHttp.createRequestO;
var sData = getRequestBody(document.forms["frmSendMail"]);
oXmlHttp.open("post", sAjaxMailSendURL, true); oXmlHttp.setRequestHeader("Content-Type",
"application/x-www-form-u rlencoded");
oXmlHttp.onreadystatechange = function (){ try {
if (oXmlHttp.readyState == 4) { if (oXmlHttp.status == 200) {
sendConfirmation(oXmlHttp. responseText); } else {
throw new Error("Возникла ошибка при попытке " +"соединения с сервером. +"Письмо не было отправлено.");

} catch (oException) {
oMailbox.showNotice("error", oException.message);
>;
oXmlHttp.send(sData); } catch (oException) {
; this.showNotice("error", oException.message);
}
}
Как и метод requestO, метод sendMail() начинается с проверки нали¬чия предыдущего незавершенного запроса. Если других активных за¬просов нет, выполняются некоторые изменения в пользовательском интерфейсе. Прежде всего делается невидимой форма составления но¬вого письма, для этого в свойство display записывается значение попе. Затем значение block записывается в свойство display, что делает види¬мой область отображения состояния. Тем самым пользователь извеща¬ется о том, что идет процесс отправки почты.
Затем вызывается метод setProcessig(), чтобы зафиксировать факт на¬чала выполнения запроса, и далее с помощью getRequestBody() создает¬ся строка, при этом методу в качестве аргумента передается форма со¬ставления письма. После инициализации объекта oXMLHttp устанавлива¬ется соответствующий заголовок, далее назначается обработчик собы¬тия onreadystatechange, который передает полученный от сервера ответ функции sendConfirmationQ (будет описана далее в разделе «Функции обратного вызова»).
Последний в этой группе метод navigate(). Он вызывается всякий раз, когда изменения в пользовательском интерфейсе должны быть зафик
сированы в журнале посещений броузера (что даст пользователя» можность перемещаться с помощью кнопок броузера Forward Для выполнения запросов к серверу и получения ответов от него я методе организован скрытый фрейм:
navigate: function (sAction, sld) { if (this.processing) return;
this.setProcessing(true); var sURL = sAjaxMailNavigateURL + "?folder=" + this. info, folder' + "&page=" + this.info.page + "&action=" + sAction;
if (sld) {
sURL += "&id=". + sld; "
this.iLoader.src = sURL; } catch (oException) {
this.showNotice("error", oException.message); ..

Этот метод принимает всего два аргумента: название выполняемо! рации и необязательный числовой идентификатор сообщения ( поминает метод request ()). Как и другие методы взаимодействия вером, он начинает свою работу с проверки существования неэ ного запроса: если незавершенный запрос существует, то метод возвращает управление, ничего не сделав. В противном случае; ется стандартная схема выполнения запроса на базе конструкция catch. Сначала в свойство processing записывается значение true, зафиксировать факт начала выполнения запроса. Затем, точно как и в методе request (), конструируется строка запроса, куда д ется только идентификатор сообщения, если он был передан И в заключение сконструированный URL записывается в свой фрейма. После этого регистрация факта завершения обработки ложится уже на страницу, которая будет получена с сервера.