Чтение онлайн

на главную - закладки

Жанры

Шрифт:

? readyState = 3 — запрос происходит в данное время;

? readyState = 4 — запрос завершен, получен результат.

Другое свойство responseText отвечает за хранение ответа от сервера после запроса. Если совместить использование всех этих свойств вместе, то можно написать следующий часто используемый код обработки асинхронного запроса:

xhr.onreadystatechange = function {

if (xhr.readyState == 4) {

docum.ent.getElementById("timeText") .value = xhr.responseText;

}

}

Здесь

свойству onreadystatechange присваивается функция для обработки изменения состояния объекта XMLHttpRequest, представленного переменной xhr. Функция проверяет свойство readyState на значение 4, которое говорит об успешном завершении запроса и присваивает элементу с идентификатором timeText текстовое значение результата запроса.

Для создания запроса к серверу используется две функции XMLHttpRequest: open и send. Функция open содержит три параметра:

? текстовое значение с типом запроса: GET или POST;

? текстовое значение со строкой запроса, указывающей на страницу, к которой необходимо выполнить запрос;

? булево значение, определяющее, должен ли быть запрос асинхронным.

Функция send содержит один параметр, который должен определять данные, отправляемые вместе с запросом. Данные могут представлять собой как некую строку, так и XML-документ. В настоящее время чаще всего используется первый вариант, когда данные передаются в виде строки JSON-данных.

Для того чтобы отправить запрос на сервер, нужно вызвать следующий код:

xhr.open("GET","Home/GetTime",true);

xhr.send(null);

Запрос будет отправлен к ресурсу по относительному адресу Home/GetTime, когда сервер обработает запрос и пришлет ответ, в объекте xhr изменится состояние и будет вызвана наша реализация функции onreadystatechange.

Полный код примера, созданный на базе проекта MVC Framework по умолчанию, представлен в листинге 7.1.

Листинг 7.1

<%@ Page Language="C#"

MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent"

runat="server">

Home Page

</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent"

runat="server">

<h2>

<%= Html.Encode(ViewData["Message"]) %>

</h2>

To learn more about ASP.NET MVC visit

<a href="#" title="ASP.NET MVC Website">http://asp.net/mvc</a>.

<script type="text/javascript">

function GetTime {

var xhr;

if (window.XMLHttpRequest) {

xhr = new XMLHttpRequest;

} else if (window.ActiveXObject) {

xhr = new ActiveXObj ect("Microsoft.XMLHTTP");

} else {

alert("Браузер

не поддерживает XMLHttpRequest!");

}

xhr.onreadystatechange = function {

if (xhr.readyState == 4) {

document.getElementById("timeText").innerHTML =

"Время на сервере: " + xhr.responseText;

}

}

xhr.open("GET", "Home/GetTime", true);

xhr.send(null);

}

</script>

<input type="button" onclick="javascript:GetTime" value="Получить время" />

<span id="timeText">Время не получено</span>

</asp:Content>

В этом фрагменте кода создается кнопка для запроса данных с сервера, к которой привязан JavaScript-код Ajax и текстовое поле для отображения результата.

Серверный код, необходимый для работы, примитивен и представляет собой следующую реализацию действия GetTime для контроллера HomeController. Обратите внимание на использование атрибута OutputCache для предотвращения кэширования результата, которое в нашем случае не нужно:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

public ActionResult GetTime

{

return Json(DateTime.Now.ToString);

}

Запустив проект, мы можем запрашивать дату и время с сервера без перезагрузки страницы и с использованием технологии Ajax (рис. 7.3).

Мы рассмотрели принцип работы Ajax на базе XMLHttpRequest на простейшем примере. В действительности все несколько сложнее. Следует учитывать возможные ошибки, которые могут возникнуть при обработке запроса, необходимо обрабатывать истечение времени ожидания ответа от сервера. Для упрощения работы с Ajax существуют специальные библиотеки и Framework, про которые речь пойдет далее.

MVC Framework и Ajax

MVC Framework, как новый и современный инструмент, конечно, поддерживает Ajax и предлагает удобные и обширные средства по работе с ним. На самом деле MVC Framework содержит два отдельных Ajax-инструмента: стандартную библиотеку с классами-помощниками и библиотеку jQuery, одной из возможностей которой является упрощенная работа с Ajax.

Ajax-функционал в MVC Framework

Поделиться:
Популярные книги

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Город смерти

Дилэни Сэмюэль Р.
Фантастика:
боевая фантастика
6.60
рейтинг книги
Город смерти

Бернард Шоу

Пирсон Хескет
След в истории
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Бернард Шоу

Зарубежье

Чупринин Сергей
Русская литература сегодня
Справочная литература:
справочники
7.00
рейтинг книги
Зарубежье

Поздний бунт. Андрей Старицкий

Ананьев Геннадий Андреевич
Рюриковичи
Проза:
историческая проза
5.00
рейтинг книги
Поздний бунт. Андрей Старицкий

Джон Голсуорси. Собрание сочинений в 16 томах. Том 15

Голсуорси Джон
15. Собрание сочинений
Проза:
классическая проза
5.00
рейтинг книги
Джон Голсуорси. Собрание сочинений в 16 томах. Том 15

Жемчужница

Anice and Jennifer
Фантастика:
фэнтези
5.00
рейтинг книги
Жемчужница

Печать пожирателя 2

Соломенный Илья
2. Пожиратель
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Печать пожирателя 2

Восьмое Небо

Соловьев Константин Сергеевич
Фантастика:
фэнтези
юмористическая фантастика
5.25
рейтинг книги
Восьмое Небо

"Фантастика 2025-10". Книги 1-31

Вальтер Макс
Фантастика 2025. Компиляция
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Фантастика 2025-10. Книги 1-31

Василий Аксенов. Сентиментальное путешествие

Петров Дмитрий Павлович
Остров Аксенов
Документальная литература:
биографии и мемуары
прочая документальная литература
5.00
рейтинг книги
Василий Аксенов. Сентиментальное путешествие

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Странный приятель 1 - 4

Чекрыгин Егор
Старинная литература:
прочая старинная литература
6.25
рейтинг книги
Странный приятель 1 - 4

Прыжок над бездной (сборник)

Снегов Сергей Александрович
Фантастика:
научная фантастика
5.00
рейтинг книги
Прыжок над бездной (сборник)