Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл статей про AJAX, новый подход к Web 
V
    Опции темы
Exception
  Дата 11.4.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Приветствую всех!



Собственно говоря, не знаю, что меня сподвигло на написание этого цикла, наверное желание поделиться опытом... Хотелось бы, чтобы люди не повторяли тех ошибок, которые допускал я и очень хотелось бы ознакомить людей с новой технологией, которая зовётся Web 2.0 или AJAX.



Вступление


Что же такое AJAX? AJAX буквально расшифровывается как Asynchronous JavaScript And XML - асинхронный JavaScript и XML. Что это за чудо? Думаю, лучше всего об этом написано в Википедии. Я лишь приведу цитату:

Цитата(Википедия)

AJAX (Asynchronous JavaScript and XML) — подход к построению пользовательских интерфейсов веб-приложений, при котором web-страница, не перезагружаясь, сама догружает нужные пользователю данные. AJAX — один из компонентов концепции DHTML.

Об Ajax заговорили после появления в феврале 2005-го года статьи Джесси Джеймса Гарретта (Jesse James Garrett) «Новый подход к веб-приложениям». Ajax — не самостоятельная технология. Это идея.

Ajax подход к разработке пользовательских интерфейсов базируется на двух основных принципах.

  • Использование DHTML для динамичного изменения содержания страницы.
  • Использование XMLHttpRequest для обращения к серверу «на лету», не перезагружая всю страницу полностью (также существует альтернативный вариант — динамическая подгрузка JavaScript с использованием DOM).

Использование этих двух подходов позволяет создавать намного более удобные веб-интерфейсы пользователя на тех страницах сайтов, где необходимо активное взаимодействие с пользователем. Использование Ajax стало наиболее популярно после того как компания Google начала активно использовать его при создании своих сайтов, таких как Gmail, Google maps и Google suggest. Создание этих сайтов подтвердило эффективность использования данного подхода.


Приложение AJAX состоит из двух частей:
  • Клиент - это код HTML и JavaScript.
  • Сервер - это часть, которая взаимодействует со страничками и имеет доступ к данным.

Обычная схема вхаимодействия такова:
  • Браузер загружает клиентскую страницу.
  • При взаимодействии с интерфейсом страницы JavaScript асинхронно передаёт и принимает данные от сервера в формате XML.
  • Браузер, а точнее, движок AJAX-приложения на JavaScript, обрабатывает данные, полученные от сервера и динамически меняет UI страницы.

Таким образом, появляется возможность писать Rich UI для Web!
Благодаря AJAX мы можем сделать страницу, поддерживающую Drag&Drop, всплывающие меню и даже автозаполнение TextBox'ов. Что самое приятное - страница совсем не перезагружается во время работы с пользователем!


Что же такое Atlas?

Atlas - это свободная реализация AJAX от Microsoft для ASP .NET. В чём её преимущества?
  • Во-первых, она позволяет оформить серверную часть как Web-сервис.
  • Во-вторых, благодаря специальным скриптам, в JavaScript появляется некий аналог ООП: возможно наследование, реализация интерфейсов и т.д.
  • В-третьих, разработчику практически ничего не нужно знать про внутреннюю работу Atlas.
  • В-четвёртых, не нужно писать код для поддержки различных браузеров - он встроен в Atlas.

Это было вступление. Следом за ним идёт вторая часть, которая покажет простейший пример использования Atlas. Оставайтесь с нами smile !
PM   Вверх
Exception
Дата 11.4.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



К сожалению, вторая часть статьи, только что мною написанная, умерла ввиду того, что уроды-электрики отрубили свет во всём доме. Теперь буду сохраняться каждую минуту :angry
Так что ждите сегодня вечером или завтра.
PM   Вверх
Exception
Дата 11.4.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Сдерживая злость на электриков, пишу вторую часть...


Приготовления

На данный момент Atlas находится в состоянии разработки. Но это вовсе не значит, что им ещё рано пользоваться. Напротив - чем раньше Вы начнёте использовать его, тем лучше. На данный момент Atlas распространяется свободно (и будет распространяться), скачать самый новый дистрибутив всегда можно здесь.

Hello, World!


После того, как Вы установили Atlas, в шаблонах сайтов в Visual Studio появится новая иконка - ASP .NET 'Atlas' Web Site. Нажмите "ОК".

У Вас появится страница Default.aspx, папка ScriptLibrary и библиотека Microsoft.Web.Atlas.dll в папке Bin. Также Atlas модифицирует файл web.config. Собственно говоря, в папке ScriptLibrary хранятся все скрипты, необходимые для работы Atlas. В библиотеке Microsoft.Web.Atlas.dll хранятся серверные компоненты, о них мы поговорим позднее.

Для начала, мы создадим простенький Web-сервис a la Hello, World.

Добавьте в проект новый Web-сервис и назовите его WebService.asmx. В codebehind этого сервиса добавьте следующие строчки:

Код

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

Namespace AtlasTest

    <WebService(Namespace:="http://tempuri.org/")> _
    <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    Public Class WebService
        Inherits System.Web.Services.WebService

        <WebMethod()> _
        Public Function HelloWorld() As String
            Return "Hello, World!"
        End Function

    End Class

End Namespace


Код

using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace AtlasTest
{

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello, World!";
        }
    }
}


Как видно, наш Web-сервис содержит один лишь метод HelloWorld(), который возвращает строку "Hello, World!".

Далее, напишите в самом asmx-файле сервиса следующую строку:

Код
<%@ WebService Language="VB" CodeBehind="~/App_Code/WebService.vb" Class="AtlasTest.WebService" %>


Всё, наш Web-сервис готов!

Теперь зайдите в Source странички Default.aspx. И немного наберитесь терпения.


Для начала нам необходимо познакомиться с самым важным компонентом Atlas - ScriptManager. Его работа - управлять скриптами Atlas и подключать необходимые к странице. Тег <atlas:ScriptManager> имеет три внутренних тега. Сейчас мы их рассмотрим чуть поближе.
  • ErrorTemplate - темплэйт, куда записывается сообщение, выскакивающее при ошибке. Он нам сейчас не понадобится.
  • Scripts - секция, через которую мы можем подключить пользовательские скрипты.
  • Services - секция, через которую мы можем подключить Web-сервисы к странице.
На данный момент нас интересует только секция Service. Чтобы добавить наш Web-сервис, необходимо написать следующий код:

Код

<atlas:ScriptManager ID="MainScriptManager" runat="server">
    <Services>
        <atlas:ServiceReference Path="WebService.asmx" />
    </Services>
</atlas:ScriptManager>


Прекрасно, мы подключили Web-сервис к нашей странице. Теперь добавьте на страницу следующий код:

Код

<input type="button" value="Послать запрос" onclick="SendQuery();" />
<div id="Result" />


У нас появится два новых элемента на странице - кнопка "Послать запрос" и div. Как Вы, наверное, уже догадались по его неоднозначному имени, в нём будет отображаться результат запроса.

При нажатии на кнопку вызывается функция JavaScript, которую мы сейчас напишем.

Добавьте в секцию head пустой тег script:

Код

<script type="text/javascript">
</script>


Теперь можно писать функции. Код JavaScript выглядит так:

Код

function SendQuery()
{
    // Мы вызываем наш Web-сервис, передавая ему
    // функцию, которая вызывается по получении ответа
    AtlasTest.WebService.HelloWorld(onRequestComplete);
}

function onRequestComplete(result)
{
    // Мы находим тот div
    var ourDiv = document.getElementById("Result");
    // Заполняем его информацией от Web-сервиса
    ourDiv.innerHTML = result;
}


Как видно, код прост до невозможности. Как и ожидалось, после нажатия кнопки под ней повилась надпись "Hello, World!".

Проверить асинхронность можно очень легко: модифицируйте Web-сервис, добавив в код Web-сервиса команду

Код

System.Threading.Thread.Sleep(5000)


Код

System.Threading.Thread.Sleep(5000);


Вы можете спокойно просматривать страницу, а в это время код JavaScript ожидает ответа от сервера.

В следующей статье мы поговорим об автозаполнении TextBox'ов, как в Gmail.


Полный код страницы:

Код

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript">
        function SendQuery()
        {
            AtlasTest.WebService.HelloWorld(onRequestComplete);
        }

        function onRequestComplete(result)
        {
            var ourDiv = document.getElementById("Result");
            ourDiv.innerHTML = result;
        }
    </script>
</head>
<body>
    <form id="mainForm" runat="server">
        <atlas:ScriptManager ID="MainScriptManager" runat="server">
            <Services>
                <atlas:ServiceReference Path="WebService.asmx" />
            </Services>
        </atlas:ScriptManager>
        <div>
            <input type="button" value="Послать запрос" onclick="SendQuery();" />
            <div id="Result" />
        </div>
    </form>
</body>
</html>


Успехов!

Это сообщение отредактировал(а) Exception - 11.4.2006, 15:24
PM   Вверх
Exception
Дата 13.4.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Пока я разбираюсь с автозаполнением (не такая простая вещь smile ), представлю несколько новых контролов Atlas "на закуску" smile


CascadingDropDown - асинхронный дропдаун smile

CollapsiblePanel - понелька, умеющая сворачиваться smile

ConfirmButton - позволяет добавить диалог типа "Вы уверены?" к кнопочкам

DragPanel - панель, которую можно таскать по странице

HoverMenu - типа менюшки, выскакивающей при наведении мыши

PopupControl - extender, позволяющий добавить к элементам popup-поведение

ReorderList - назначение понятно, лист позволяет перемещать элементы внутри себя

TextBoxWaterMark - текстбокс с фоном

ToggleButton - чекбокс с картинкой

Качать всё это счастье можно здесь.

Радуйтесь, а я пока пойду разбираться с автозаполнением smile .
PM   Вверх
Exception
Дата 15.4.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Автозаполнение

Разобрался наконец-то smile .

Итак, для начала нам нужно создать Web-сервис, предоставляющий список строк для автозаполнения. Это сделать нетрудно.

Вот код этого сервиса:

Код

Namespace AtlasTest

    <WebService(Namespace:="http://tempuri.org/")> _
    <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    Public Class WebService
        Inherits System.Web.Services.WebService

        Private members As String() = _
        {"arilou", "mr.DUDA", "chipset", "alir", "Exception", "Wowa", "Vit", _
        "Poseidon", "2man", "Akina", "cardinal", "DezmASter", "bagira", _
        "SoWa", "Kagor", "Pegas", "sergej.z", "Gannibal", "ivashkanet", _
        "VisualProgrammerNET", "asdf", "oleg1973", "Guedda"}

        Private _prefixText As String

        <WebMethod()> _
        Public Function GetWordList(ByVal prefixText As String, ByVal count As Integer) As String()
            _prefixText = prefixText
            Dim resultArray(count) As String
            resultArray = Array.FindAll(members, AddressOf ArrayFilter)
            Return resultArray
        End Function

        Private Function ArrayFilter(ByVal item As String) As Boolean
            Return item.StartsWith(_prefix, StringComparison.InvariantCultureIgnoreCase)
        End Function

    End Class

End Namespace


Код

namespace AtlasTest

    [WebService(Namespace="http://tempuri.org/")] _
    [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
    public class WebService : System.Web.Services.WebService
    {
        private string members =
        {"arilou", "mr.DUDA", "chipset", "alir", "Exception", "Wowa", "Vit",
        "Poseidon", "2man", "Akina", "cardinal", "DezmASter", "bagira",
        "SoWa", "Kagor", "Pegas", "sergej.z", "Gannibal", "ivashkanet",
        "VisualProgrammerNET", "asdf", "oleg1973", "Guedda"}

        private string _prefix;

        [WebMethod]
        public string[] GetWordList(string prefixText, int  count)
        {
            _prefix = prefixText;
            string[] resultArray = new string[count];
            resultArray = Array.FindAll(members, new System.Predicate<string>(ArrayFilter));
            return resultArray;
        }

        private bool ArrayFilter(string item)
        {
            return item.StartsWith(_prefix, StringComparison.InvariantCultureIgnoreCase);
        }

    }

}


Работа этого сервиса проста. Если смотреть на него, как на "чёрный ящик", то можно составить такое описание метода GetWordList:

GetWordList

Параметры:
  • prefixText - текст, набранный пользователем
  • count - количество результатов
Результирующее значение: массив, состоящий из не более count строк, начинающихся с префикса prefixText.

Например, если пользователь наберёт "c" на клавиатуре, то в ответ ему придут "chipset" и "cardinal", если, конечно, count больше или равен двум.

Хорошо, мы написали сервис. Что дальше? Как обычно, добавьте на страницу контрол ScriptManager:

Код
<atlas:ScriptManager ID="MyScriptManager" runat="server" />


Далее, добавьте на форму самый что ни на есть обыкновенный TextBox:

Код

<asp:TextBox ID="MyTextBox" runat="server" />


Теперь приступим к самому главному.

Для добавления к полю AutoComplete-поведения нобходимо объявить соответствующий элемент:

Код

<atlas:AutoCompleteExtender runat="server" ID="MyAutoCompleteExtender">
</atlas:AutoCompleteExtender>


Этот контрол позволяет расширять любой TextBox на странице путём добавления соответствующего тега:

Код

<atlas:AutoCompleteProperties TargetControlID="MyTextBox" Enabled="True" ServicePath="WebService.asmx"
    ServiceMethod="GetWordList" MinimumPrefixLength="1" />


Всё просто, не так ли?

Всё, автозаполнение работает!

Полный код страницы:

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Yo</title>
</head>
<body>
    <form id="mainForm" runat="server">
        <atlas:ScriptManager ID="MyScriptManager" runat="server" />
        <div id="content">
            <asp:TextBox ID="MyTextBox" runat="server" />
            <atlas:AutoCompleteExtender runat="server" ID="MyAutoCompleteExtender">
                <atlas:AutoCompleteProperties
                     TargetControlID="MyTextBox" Enabled="True"
                    ServicePath="WebService.asmx" ServiceMethod="GetWordList"
                    MinimumPrefixLength="1" />
            </atlas:AutoCompleteExtender>
        </div>
    </form>
</body>
</html>


В следующем обзоре мы рассмотрим, как сделать Drag&Drop на странице smile

Успехов!

Это сообщение отредактировал(а) Exception - 15.4.2006, 12:46
PM   Вверх
Exception
Дата 15.4.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Drag & Drop

Значит, так. На этот раз мы рассмотрим сразу два
способа реализации Drag&Drop на странице.

Способ №1

Сначала мы рассмотрим стандартный способ. Создайте новую страничку. Далее необходимо заполнить её контентом - дело в том, что панели "ездят", то есть двигаются только внутри самой страницы (что понятно), а посему не могут двигаться там, где страницы уже нет smile . Как вариант - сделать большой div и запихнуть всё в него. Я лично для просмотра границ всяких div'ов пользую Web Developer Toolbar - хороший плагин для Firefox.

Допустим, у нас есть заполненная страничка. Теперь нужно проделать довольно-таки стандартную процедуру - поместить на страницу ScriptManager. Думаю, это Вы умеете smile . Теперь давайте сделаем две панельки.

Красивыми они у нас не будут - я сейчас не в настроении пускаться
в дизайнерские изыски:

Код

<asp:Panel ID="FirstPanel" runat="server" CssClass="floatPanel">

    <asp:Label ID="FirstLabel" runat="server" Text="Это область, которую можно таскать мышкой :)" />

</asp:Panel>

<asp:Panel ID="SecondPanel" runat="server" CssClass="floatPanel">

    <asp:Label ID="SecondLabel" runat="server" Text="Это область, которую можно таскать мышкой :)" />

</asp:Panel>


Теперь объявим класс CSS floatPanel:

Код

.floatPanel
{
    cursor:move;
    background-color:#a50;
    border-style:solid;
    border-width:1px;
    height:160px;
    width:160px;
}


Кстати, если не поставить background-color, то панель будет прозрачной.

У нас есть страница и две панели. Что с ними делать? Нам нужно добавить к ним поведение Drag&Drop, то есть, чтобы их можно было двигать по всеёй странице.

Для этого мы добавим на страницу ещё один контрол Atlas: DragOverlayExtender.

Этот контрол является чем-то сродни AutoCompleteExtender (как мы потом узнаем, они на самом деле родня ближе чем по Control'у).

Внутри него может быть помещён (и не один) тег DragOverlayProperties (да-да, это аналог AutoCompleteProperties). В нашем случае это будет выглядеть так:

Код

<atlas:DragOverlayExtender ID="MyDragOverlayExtender" runat="server">
    <atlas:DragOverlayProperties TargetControlID="FirstPanel" Enabled="True" />
    <atlas:DragOverlayProperties TargetControlID="SecondPanel" Enabled="True" />
</atlas:DragOverlayExtender>


Кстати, самое интересное, что при добавлении extender'а на страницу у панели появляется свойство DragOverlay с теми же параметрами - оно связывается с DragOverlayProperties.

Вот и готова наша страница! Теперь две панели могут перемещаться по всей области страницы.

Способ №2

Этот способ подразумевает наличие у Вас Atlas Controls Toolkit, о котором я говорил несколькими постами выше.

Он является более удобным и совершенным.

Давайте чуточку видоизменим панели. Для начала, уберите из стиля строку

Код

    cursor:move;


Мы сделаем так, чтобы двигать панель можно было только за определённый участок.

Добавим по "заголовку" в панели:

Код

<asp:Panel ID="FirstPanel" runat="server" CssClass="floatPanel">

    <asp:Label ID="FirstHeader" runat="server" Text="Тащи за меня" CssClass="panelHeader" />

    <br />

    <asp:Label ID="FirstLabel" runat="server" Text="Здесь находится содержание панели" />

</asp:Panel>

<asp:Panel ID="SecondPanel" runat="server" CssClass="floatPanel">

    <asp:Label ID="SecondHeader" runat="server" Text="Тащи за меня" CssClass="panelHeader" />

    <br />

    <asp:Label ID="SecondLabel" runat="server" Text="Здесь находится содержание панели" />

</asp:Panel>


Собственно, объявим класс CSS panelHeader так:

Код

.panelHeader
{
    font-weight:bold;
    cursor:move;
}


Это будет та область, за которую можно "таскать" мышкой панель.

Ну и самое главное - необходимо объявить DragPanelExtender из Atlas Control Toolkit. В нашем случае это объявление выглядит так:

Код

<atlasToolkit:DragPanelExtender ID="MyDragPanelExtender" runat="server">
    <atlasToolkit:DragPanelProperties TargetControlID="FirstPanel" DragHandleID="FirstHeader" />
    <atlasToolkit:DragPanelProperties TargetControlID="SecondPanel" DragHandleID="SecondHeader" />
</atlasToolkit:DragPanelExtender>


Всё очень просто smile . Вот мы и познакомились с техникой создания Drag&Drop на странице.

Полный код страницы (я пишу только для варианта № 2, для первого надо чуть изменить):

Код

 <%@ Register Assembly="AtlasControlToolkit" Namespace="AtlasControlToolkit" TagPrefix="atlasToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Drag&Drop</title>
    <style type="text/css">
    .floatPanel
    {
        background-color:#a50;
        border-style:solid;
        border-width:1px;
        height:160px;
        width:160px;
    }
    .panelHeader
    {
        font-weight:bold;
        cursor:move;
    }
    </style>
</head>
<body>
    <form id="mainForm" runat="server">
        <div id="content" style="text-align: center;">
            <atlas:ScriptManager ID="MyScriptManager" runat="server" />

            <asp:Panel ID="FirstPanel" runat="server" CssClass="floatPanel">

                <asp:Label ID="FirstHeader" runat="server" Text="Тащи за меня" CssClass="panelHeader" />

                <br />

                <asp:Label ID="FirstLabel" runat="server" Text="Здесь находится содержание панели" />

            </asp:Panel>

            <asp:Panel ID="SecondPanel" runat="server" CssClass="floatPanel">

                <asp:Label ID="SecondHeader" runat="server" Text="Тащи за меня" CssClass="panelHeader" />

                <br />

                <asp:Label ID="SecondLabel" runat="server" Text="Здесь находится содержание панели" />

            </asp:Panel>

            <atlasToolkit:DragPanelExtender ID="MyDragPanelExtender" runat="server">

                <atlasToolkit:DragPanelProperties TargetControlID="FirstPanel" DragHandleID="FirstHeader" />

                <atlasToolkit:DragPanelProperties TargetControlID="SecondPanel" DragHandleID="SecondHeader" />

            </atlasToolkit:DragPanelExtender>

            Здесь должен находиться контент страницы

        </div>
    </form>
</body>
</html>


До скорых встреч!

P.S. В следующий раз мы рассмотрим ещё парочку контролов из Atlas Control Toolkit, в частности, CollapsiblePanelExtender.

Это сообщение отредактировал(а) Exception - 15.4.2006, 15:23
PM   Вверх
TheAviator
Дата 23.4.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 28.9.2003
Где: Николаев-Киев

Репутация: нет
Всего: нет



I'm sorry
А разве в ASP.NET 2.0 поддержка динамического обновления не встроена стандарным компонентам типа выпадающего списка и т.д?
А зачем тогда Atlas ? 
PM MAIL WWW ICQ   Вверх
Exception
Дата 23.4.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Не встроена. 
PM   Вверх
celarent
Дата 14.7.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.7.2006
Где: SPb

Репутация: нет
Всего: нет



здорово! на русском информации, связанной с Atlas мало. Так, в порядке интереса: не хотите этот текст таки отдельной статьей на AJAX Planet повесить? icq 59375609 
PM MAIL WWW ICQ   Вверх
Pankon
Дата 17.7.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 2
Всего: 5



Куда девается результат запроса (Atlas), если страница приемник была закрыта пользователем?

И как отследить, что страница приемник была закрыта пользователем?

Ну и до кучи - как организовать timeout для запросов при использовании atlas?  
PM MAIL   Вверх
Exception
Дата 17.7.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



Цитата(celarent @  14.7.2006,  13:21 Найти цитируемый пост)
не хотите этот текст таки отдельной статьей на AJAX Planet повесить? icq 59375609  


Пожалуйста, с такими вопросами -- в личку. Посмотрим.


Цитата(Pankon @  17.7.2006,  15:17 Найти цитируемый пост)
Куда девается результат запроса (Atlas), если страница приемник была закрыта пользователем?


Никуда он не девается. Это же не материальный объект, чтобы ему куда-то деваться smile



Цитата(Pankon @  17.7.2006,  15:17 Найти цитируемый пост)
как отследить, что страница приемник была закрыта пользователем?


Никак. Потому что сервер ничего не знает о приёмнике. И не должен -- тут своеобразная разделённая архитектура -- ведь клиентом web-сервера может быть и Atlas-страница и десктопное приложение и т.п.


Цитата(Pankon @  17.7.2006,  15:17 Найти цитируемый пост)
как организовать timeout для запросов при использовании atlas?   



Это точно можно сделать, но не помню, как smile 
PM   Вверх
Pankon
Дата 19.7.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 2
Всего: 5



Цитата(Exception @  17.7.2006,  17:47 Найти цитируемый пост)
Цитата(Pankon @  17.7.2006,  15:17)
Куда девается результат запроса (Atlas), если страница приемник была закрыта пользователем?
Никуда он не девается. Это же не материальный объект, чтобы ему куда-то деваться
Впринципе, информацию можно назвать "материальной" (остальное в форуме по философии smile )

Цитата(Exception @  17.7.2006,  17:47 Найти цитируемый пост)
Цитата(Pankon @  17.7.2006,  15:17)
как отследить, что страница приемник была закрыта пользователем?
Никак. Потому что сервер ничего не знает о приёмнике. И не должен -- тут своеобразная разделённая архитектура -- ведь клиентом web-сервера может быть и Atlas-страница и десктопное приложение и т.п.
Это-то понятно.

Все-таки хотелось бы найти решение следующей проблемы.
Цитата(Pankon @  17.7.2006,  14:17 Найти цитируемый пост)
И как отследить, что страница приемник была закрыта пользователем?
 или пользователь першел на другую, не дождавшись появления AJAX запроса, тем самым прекратить на сервере подготовку информации...
 
PM MAIL   Вверх
Exception
Дата 19.7.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 9
Всего: 186



По сути, никак. Это вообще нереализуемо в web. 
PM   Вверх
Pankon
Дата 19.7.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 2
Всего: 5



smile 
PM MAIL   Вверх
mr.DUDA
Дата 19.7.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 5
Всего: 232



Другое дело если используются Rich Client Applications ;) 


--------------------
user posted image
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.1768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.