AJAX для новичков

    Сейчас в сети Интернет наблюдается очень активное развитие (и даже использование) новых технологий. Одна из таких технологий — AJAX.


    Что такое AJAX?



    AJAX — это аббревиатура, которая означает Asynchronous Javascript and XML. На самом деле, AJAX не является новой технологией, так как и Javascript, и XML существуют уже довольно продолжительное время, а AJAX — это синтез обозначенных технологий. AJAX чаще всего ассоцириуется с термином Web 2.0 и преподносится как новейшее Web-приложение.


    При использовании AJAX нет необходимости обновлять каждый раз всю страницу, так как обновляется только ее конкретная часть. Это намного удобнее, так как не приходится долго ждать, и экономичнее, так как не все обладают безлимитным интернетом. Правда в этом случае, разработчику необходимо следить, чтобы пользователь был в курсе того, что происходит на странице. Это можно реализовать с использованием индикаторов загрузки, текстовых сообщений о том, что идёт обмен данными с сервером. Необходимо также понимать, что не все браузеры поддерживают AJAX (старые версии браузеров и текстовые браузеры). Плюс Javascript может быть отключен пользователем. Поэтому, не следует злоупотреблять использованием технологии и прибегать к альтернативным методам представления информации на Web-сайте.


    Обобщим достоинства AJAX:
    • Возможность создания удобного Web-интерфейса
    • Активное взаимодействие с пользователем
    • Частичная перезагрузка страницы, вместо полной
    • Удобство использования

    AJAX использует два метода работы с веб-страницей: изменение Web-страницы не перезагружая её, и динамическое обращение к серверу. Второе может осуществляться несколькими способами, в частности, XMLHttpRequest, о чем мы и будем говорить, и использование техники скрытого фрейма.


    Обмен данными



    Для того, чтобы осуществлять обмен данными, на странице должен быть создан объект XMLHttpRequest, который является своеобразным посредником между Браузером пользователя и сервером (рис. 1). С помощью XMLHttpRequest можно отправить запрос на сервер, а также получить ответ в виде различного рода данных.





    Обмениваться данными с сервером можно двумя способами. Первый способ — это GET-запрос. В этом запросе вы обращаетесь к документу на сервере, передавая ему аргументы через сам URL. При этом на стороне клиента будет логично использовать функция Javascript`а escape для того, чтобы некоторые данные не прервали запрос.


    Не рекомендуется делать GET-запросы к серверу с большими объемами данных. Для этого существует POST-запрос.


    Клиент часть, написанная на Javascript, должна обеспечивать необходимую функциональность для безопасного обмена с сервером и предоставлять методы для обмена данными любым из вышеперечисленных способов. Серверная часть должна обрабатывать входные данные, и на основе их генерировать новую информацию (например, работая с базой данных), и отдавать ее обратно клиенту. Например, для запроса информации с сервера можно использовать обычный GET-запрос с передачей нескольких и небольших по размеру параметров, а для обновления информации, или добавления новой информации потребуется использовать уже POST-запрос, так как он позволяет передавать большие объемы данных.


    Как уже было сказано, AJAX использует асинхронную передачу данных. Это значит, что пока идёт передача данных, пользователь может совершать другие, необходимые ему действия. В это время следует оповестить пользователя о том, что идёт какой-либо обмен данными, иначе пользователь подумает, что произошло что-то не то и может покинуть сайт, или повторно вызвать «зависшую», по его мнению, функцию. Индикация во время обмена данными в приложении Web 2.0 играет очень важную роль: посетители могли еще не привыкнуть к таким способам обновления страницы.


    Ответ от сервера может быть не только XML, как следует из названия технологии. Помимо XML, можно получить ответ в виде обычного текста, или же JSON (Javascript Object Notation). Если ответ был получен простым текстом, то его можно сразу вывести в контейнер на странице. При получении ответа в виде XML, обычно происходит обработка полученного XML документа на стороне клиента и преобразование данных к (X)HTML. При получении ответа в формате JSON клиент должен лишь выполнить полученный код (функция Javascript`а eval) для получения полноценного объекта Javascript. Но здесь нужно быть осторожным и учитывать тот факт, что с использованием этой технологии может быть передан вредоносный код, поэтому перед выполнением полученного с сервера кода следует его тщательно проверить и обработать. Существует такая практика, как «холостой» запрос, при котором никакой ответ от сервера не приходит, лишь изменяются данные на стороне сервера.


    В разных браузерах данный объект обладает разными свойствами, но в целом он совпадает.


    Методы объекта XMLHttpRequest



    Заметьте, что названия методов записаны в том же стиле (Camel-style), что и другие функции Javascript. Будьте внимательны при их использовании.


    abort() — отмена текущего запроса к серверу.


    getAllResponseHeaders() — получить все заголовки ответа от сервера.


    getResponseHeader(«имя_заголовка») — получить указаный заголовок.


    open(«тип_запроса»,«URL»,«асинхронный»,«имя_пользователя»,«пароль») — инициализация запроса к серверу, указание метода запроса. Тип запроса и URL — обязательные параметры. Третий аргумент — булево значение. Обычно всегда указывается true или не указывается вообще (по умолчанию — true). Четвертый и пятый аргументы используются для аутентификации (это очень небезопасно, хранить данные об аутентификации в скрипте, так как скрипт может посмотреть любой пользователь).


    send(«содержимое») — послать HTTP запрос на сервер и получить ответ.


    setRequestHeader(«имя_заголовка»,«значение») — установить значения заголовка запроса.


    Свойства объекта XMLHttpRequest



    onreadystatechange — одно из самых главных свойств объекта XMLHttpRequest. С помощью этого свойства задаётся обработчик, который вызывается всякий раз при смене статуса объекта.


    readyState — число, обозначающее статус объекта.


    responseText — представление ответа сервера в виде обычного текста (строки).


    responseXML — объект документа, совместимый с DOM, полученного от сервера.


    status — состояние ответа от сервера.


    statusText — текстовое представление состояния ответа от сервера.


    Следует подробнее расммотреть свойство readyState:
    • 0 — Объект не инициализирован.
    • 1 — Объект загружает данные.
    • 2 — Объект загрузил свои данные.
    • 3 — Объек не полностью загружен, но может взаимодействовать с пользователем.
    • 4 — Объект полностью инициализирован; получен ответ от сервера.

    Именно опираясь на состояние готовности объекта можно представить посетителю информацию о том, на какой стадии находится процесс обмена данными с сервером и, возможно, оповестить его об этом визуально.


    Создание объекта XMLHttpRequest



    Как уже говорилось выше, создание данного объекта для каждого типа браузера — уникальный процесс.


    Например, для создания объекта в Gecko-совместимых браузерах, Konqueror`е и Safari, нужно использовать следующее выражение:


    var Request = new XMLHttpRequest();



    А для Internet Explorer`а используется следующее:


    var Request = new ActiveXObject("Microsoft.XMLHTTP");



    Либо


    var Request = new ActiveXObject("Msxml2.XMLHTTP");



    Теперь, чтобы добиться кроссбраузерности, необходимо сложить все функции в одну:


    function CreateRequest()
    {
        var Request = false;
    
        if (window.XMLHttpRequest)
        {
            //Gecko-совместимые браузеры, Safari, Konqueror
            Request = new XMLHttpRequest();
        }
        else if (window.ActiveXObject)
        {
            //Internet explorer
            try
            {
                 Request = new ActiveXObject("Microsoft.XMLHTTP");
            }    
            catch (CatchException)
            {
                 Request = new ActiveXObject("Msxml2.XMLHTTP");
            }
        }
     
        if (!Request)
        {
            alert("Невозможно создать XMLHttpRequest");
        }
        
        return Request;
    } 
    



    После всего этого можно создавать данный объект и не беспокоится за работоспособность на популярных браузерах. Но создать объект можно в разных местах. Если создать его глобально, то в определенный момент времени возможен будет только один запрос к серверу. Можно создавать объект всякий раз, как происходит запрос к серверу (это почти полностью решит проблему).


    Запрос к серверу



    Алгоритм запроса к серверу выглядит так:
    • Проверка существования XMLHttpRequest.
    • Инициализация соединения с сервером.
    • Посылка запрса серверу.
    • Обработка полученных данных.

    Для создания запроса к серверу мы создадим небольшую функцию, которая будет по функциональности объединять в себе функции для GET и POST запросов.


    /*
    Функция посылки запроса к файлу на сервере
    r_method  - тип запроса: GET или POST
    r_path    - путь к файлу
    r_args    - аргументы вида a=1&b=2&c=3...
    r_handler - функция-обработчик ответа от сервера
    */
    function SendRequest(r_method, r_path, r_args, r_handler)
    {
        //Создаём запрос
        var Request = CreateRequest();
        
        //Проверяем существование запроса еще раз
        if (!Request)
        {
            return;
        }
        
        //Назначаем пользовательский обработчик
        Request.onreadystatechange = function()
        {
            //Если обмен данными завершен
            if (Request.readyState == 4)
            {
                //Передаем управление обработчику пользователя
                r_handler(Request);
            }
        }
        
        //Проверяем, если требуется сделать GET-запрос
        if (r_method.toLowerCase() == "get" && r_args.length > 0)
        r_path += "?" + r_args;
        
        //Инициализируем соединение
        Request.open(r_method, r_path, true);
        
        if (r_method.toLowerCase() == "post")
        {
            //Если это POST-запрос
            
            //Устанавливаем заголовок
            Request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
            //Посылаем запрос
            Request.send(r_args);
        }
        else
        {
            //Если это GET-запрос
            
            //Посылаем нуль-запрос
            Request.send(null);
        }
    } 
    



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


    function ReadFile(filename, container)
    {
        //Создаем функцию обработчик
        var Handler = function(Request)
        {
            document.getElementById(container).innerHTML = Request.responseText;
        }
        
        //Отправляем запрос
        SendRequest("GET",filename,"",Handler);
        
    } 
    



    Именно таким образом происходит взаимодействие с сервером.


    Обработка ответа



    В предыдущем примере мы сделали функцию запроса к серверу. Но она, по сути, небезопасна, так как мы не обрабатываем состояния объекта и состояния ответа от сервера.


    Дополним наш код, чтобы он смог выводить визуальное оповещение о процессе загрузки.


    ...
    Request.onreadystatechange = function()
    {
        //Если обмен данными завершен
        if (Request.readyState == 4)
        {
            //Передаем управление обработчику пользователя
            r_handler(Request);
        }
        else
        {
            //Оповещаем пользователя о загрузке
        }
    }
    ... 
    



    Как вы уже знаете, объект XMLHttpRequest позволяет узнать статус ответа от сервера. Воспользуемся этой возможностью.


    ...
    Request.onreadystatechange = function()
    {
        //Если обмен данными завершен
        if (Request.readyState == 4)
        {
            if (Request.status == 200)
            {
                //Передаем управление обработчику пользователя
                r_handler(Request);
            }
            else
            {
                //Оповещаем пользователя о произошедшей ошибке
            }
        }
        else
        {
            //Оповещаем пользователя о загрузке
        }
     
    }
    ... 
    



    Варианты ответа от сервера



    От сервера можно получить данные нескольких видов:
    • Обычный текст
    • XML
    • JSON

    Если вы получаете обычный текст, то вы можете сразу же направить его в контейнер, то есть на вывод. При получении данных в виде XML вы должны обработать данные с помощью DOM-функций, и представить результат с помощью HTML.


    JSON — это объектная нотация Javascript. С ее помощью можно представить объект в виде строки (здесь можно привести аналогию с функцией сериализации). При получении JSON-данных вы должны выполнить их, чтобы получить полноценный объект Javascript и произвести с ним необходимые операции. Помните, что такая передача данных и выполнение их не являются безопасными. Вы должны следить за тем, что поступает на исполнение.


    Пример кода JSON:
    {
    
    "data":
    {
        "misc":
        [
            {
                "name" : "JSON-элемент один",
                "type" : "Подзаголовок 1"
            },
            
            {
                "name" : "JSON-элемент два",
                "type" : "Подзаголовок 2"
            }
        ]
    }
    
    } 
    



    При получении такого кода, производим следующее действие:


    var responsedata = eval("(" + Request.responseText + ")")



    После выполнения данного кода вам будет доступен объект responsedata.


    Работа с серверными языками программирования



    Такая работа ничем не отличается от обычной. Для примеров я возьму PHP в качестве серверного языка. В клиентской части ничего не изменилось, но серверная часть теперь представлена PHP-файлом.


    По традиции, начнем с приветствия нашему замечательному миру:


        echo "Hello, World!";
    



    При обращении к этому файлу клиенту вернется строка Hello, World. Как вы понимаете, это представляет широчайшие возможности для построения приложений. На основе передачи аргументов при вызове сервера с помощью XMLHttpRequest можно сделать параметризацию вывода, тем самым обеспечив обширную функциональность Web-приложения.


    Помимо PHP, можно использовать любой другой серверный язык программирования.


    Литература по теме




    Статья написана с целью рассказать новичкам о работе AJAX изнутри. Если Вам кажется, что что-то написано неточно или неверно, поправляйте, пожалуйста, меня, для того, чтобы создать достойную статью вместе.


    Конечно, если есть возможность, стоит использовать существующие фреймворки, я считаю. Но знать «как оно работает» всё-же необходимо.
    Share post

    Similar posts

    Comments 88

      0
      Помоему в сети хватает подобных руководств. Это вы сами писали?
        +5
        Да, сам писал.

        Подобных руководств действительно хватает, но на Хабре не нашёл такой обзорной статьи для новичков... Да и новичков здесь мало (: Поэтому, кстати, и не стал публиковать в коллективных блогах.
          0
          Всё-таки опубликую в блоге AJAX, чтобы новички знали что да как ;)
            +1
            мне кажется есть смысл в Викиучебник написать (вернее, начать писать там учебник по AJAX) ибо статей там (в русском разделе учебника) мало, а авторы хорошие — вот они
              0
              Плюсик вам за хороший ресурс. Не знал такого.
                0
                Да как-то не знаком с таким сайтом был до Вашего сообщения... (:
          +1

          Заметьте, что названия методов записаны в том же стиле (Camel-style),
          ...
          Open()



          //Internet explorer
          Request = new ActiveXObject("Microsoft.XMLHTTP");

          if (!Request)
          {
          HRequest = new ActiveXObject("Msxml2.XMLHTTP");
          }

          Если первый не сработает, будет исключение. Нужно ловить через try.
            0
            Спасибо, исправил. Плюс исправил еще одну ошибку - был HRequest почему-то заместо Request.
            0
            if (Request.status == 200)
            {
            //Если обмен данными завершен
            if (Request.readyState == 4)
            {
            //Передаем управление обработчику пользователя


            Наоборот надо.
              +1
              Сыро, бессвязно, ошибки...
              Имхо, нужно не перечислять методы из документации, а остановиться на важнейшем аспекте — асинхронности, на том, чем асинхронное программирование будет отличаться от привычного.
                0
                Может быть где-то Вы и правы, но с помощью опытных пользователей Хабра можно будет вместе довести материал до определённого блеска, чтобы можно было подавать пользователям.

                Насчёт несвязности: мне кажется, что всё логично - введение, обзор главного объекта и, наконец, обзор прилегающих компонентов.
                  +1
                  мне кажется во введение необходимо так же ответить на вопрос зачем это нужно, какие приимущества дает пользователям. то что без перезагрузки и трафика меньше - это конечно да, но ведь основная цель - дать пользователю больше возможностей, вот и стоит дать пару примеров подобных улучшений.
                    0
                    Спасибо за совет. Очень точное замечание. Предлагаю вместе подумать над примерами подобных улучшений.

                    Я думаю, что сам факт динамической подгрузки и отображения данных - это сама по себе большая возможность получить информацию непосредственно после действия пользователя. Да и отдача от интерфейса идёт больше, по сравнению с интерфейсами, созданными без использования AJAX. То есть, например, если мы делаем форму входа в систему (т.н. "sign in" или "логин"), то мы можем без перезагрузки страницы определить ложные данные, введённые пользователем (лишние символы). В таком случае мы немедленно вернём пользователю ошибку, выведем её в соответствующий элемент интерфейса и пользователь повторит ввод, исправит предыдущие данные. Да и сама форма, например, после входа в систему, исчезает и появляются другие элементы управления (профиль и т.п.). Или я не о том?

                    И прошу прощения за, возможно, несвязную речь - устал сегодня очень.
                +1
                В начале текста имеется ссылка на изображение (рис. 1) Где можно взглянуть?
                  0
                  Тут же (:
                  +3
                  На слове «заместо» споткнулся и дальше читать не смог. ;-)
                    +1
                    Это не я! Это НЛО! ;)
                    0
                    Пришел к выводу, что AJAX - это XMLHttpRequest + обработка разных браузеров. Остальное - вставка в элементы и серверная часть. Т.е. по сути, просто копируется эта обработка на разные сайты и все. В этом смысле удобен Prototype, но весит он многовато. Плюс, в редких случаях может понадобится обработка XML в Javascript. А она геморойная, конечно....
                      0
                      Но почему вставка в элементы и обработка XML-ответа, по Вашему мнению, не является частью AJAX? Ведь AJAX - это Asynchronous Javascript and XML, то есть всё, что относится непосредственно к обработке данных и есть AJAX, мне так кажется...
                        0
                        Ну все верно, в принципе, просто на практике (с чистым аяксом) пишется несколько универсальных функций, которые потом переносятся в новые проекты. Т.е. просто подставление в нужный div полученного через AJAX содержимого.
                      0
                      менять психологию - тяжело :)
                      столкнулся, когда первый раз flex попробовал....

                      вот там - либо AJ, либо никак :)
                        +1
                        полгода назад партия сказала "надо", программист ответил "есть", и я начал писать AJAX-приложения
                        http://www.google.com/search?q=ajax+gett… выдал сайт мозиллы, где нашлось простенькое руководство, подобное вашему, так я и стал AJAX-программистом :)

                        рекомендую книжку Ajax in action
                          0
                          Подобное, согласен. Только на английском (хотя без знания английского здесь выжить достаточно трудно - мне кажется - так как большая доля документации написана всё-таки на английском языке и, как говорится, "незнания языка не освобождает от ответственности" ;) ).

                          Я книжку Ajax in action читал на английском, просто на русском языке она появилась гораздно позже... Русскую версию я не видел, но спасибо за информацию - посмотрю теперь.
                            0
                            к сожалению русская версия не с самым лучшим переводом. встречаются неожиданные словосочетания, такие как богатый клиент и образ разработки
                              0
                              Это не редкое явление, что в переводах встречаются казусы... Мне не раз попадалось такое. Стараюсь читать оригиналы.
                          0
                          аякс - новая технология?
                            0
                            В это слово я вложил такой смысл: относительно других технологий AJAX является новоявленной, то есть полноценно использоваться она стала позже, относительно, например, использования обычного JavaScript.
                            0
                            можно еще посмотреть книгу Ajax для профессионалов
                              0
                              Хорошая идея: в конце статьи можно добавить список ссылок по теме (например, на Framework-и) и список литературы по теме. Две книжки уже есть. Рекомендуйте, пожалуйста, ещё. (:
                              –3
                              Бгыгы. Предвещали же. Попсеет хабр.
                              Скоро будет «PHP для новичков» и «Основы языка HTML, как языка программирования для глобальной сети Интернет».
                                +2
                                тут что, все без исключения - программисты?
                                +1
                                Класс. Мне как раз потребовалось узнать начальные сведения про AJAX - а тут Ваша статья. Спасибо!
                                  0
                                  Очень рад, что кому-то она помогла. Значит старания не пропали даром.
                                  0
                                  Существует такая практика, как "холостой" запрос, при котором никакой ответ от сервера не приходит, лишь изменяются данные на стороне сервера.
                                  Странно слышать что AJAX юзают для такой ерунды. Для подобной мелочи используется <img> (и при этом даже реально получить ответ от сервера вида ок / не ок).

                                  eval("var responsedata = (" + Request.responseText + ")");
                                  var responsedata = eval("(" + Request.responseText + ")") выглядит проще, правда это мелочи.
                                  В целом правильная (но несколько поздняя) статья :)
                                    0
                                    Идея использовать <img> для чего-то кроме изображений мне не нравиться, хотя из соображений понятности и однообразности кода, а AJAX как раз и предназначен для организации взаимодействия клиента и сервера, в том числе и для ерунды.
                                      0
                                      Не нравятся img - подходят script, link, object, iframe :)
                                        0
                                        И <td> можно, но я предпочитаю использовать их по прямому назначению, зачем изобретать столь изощренные велосипеды, когда можно прокатиться на AJAX`е
                                          0
                                          Как с <td>?
                                            0
                                            там не только с td, а со многими тегами, вот выдрал с одного древнего справочника:

                                            <BODY BACKGROUND="2.gif">
                                            <TABLE BORDER COLS=2 WIDTH="100%" BACKGROUND="1.gif" >
                                            <TR BACKGROUND="1.gif">
                                            <TD BACKGROUND="1.gif">


                                            а вообще у каждого елемента есть свойство element.style.background-image, можно использовать и свойство background в CSS

                                            это, конечно, все вариации на тему img, но все таки, иллюстрирует количество способов которыми можно кинуть запрос на сервер

                                            PS: почему на хабре такое маленькое окно для комментов?
                                              0

                                              а вообще у каждого елемента есть свойство element.style.background-image, можно использовать и свойство background в CSS

                                              Надеюсь, что element.style.background-image было лишь опечаткой, так как в JavaScript используется Camel-Style для именования свойств CSS и указанное свойство должно иметь вид element.style.backgroundImage
                                                0
                                                :) конечно, опечатка, с CSS спутал, когда, за день раз 40 переключаешься с одного на другое, такого стоило ожидать
                                                  0
                                                  Понимаю...
                                    0
                                    Код нужно отформатировать так, чтобы он был похож на код, а то даже лень разбираться в этой свалке.
                                      0
                                      Извиняюсь, но это не моя вина. Код был изначально отформатирован с использованием табуляции (я всегда форматирую код и никогда не позволяю себе создавать в нём свалку), но с включенным автоформатированием он расползался сильно. Сейчас я отключил автоформатирование и подправил статью.

                                      Нехватает подсветки кода различных языков на Хабре... :(
                                      0
                                      Хорошая статья. Благодарю.
                                      • UFO just landed and posted this here
                                          0
                                          Статья написана с целью рассказать новичкам о работе AJAX изнутри.

                                          Я считаю, что просто необходимо знать как работает такая технология изнутри. Может быть, на практике это и неприменимо (сам использую различные фреймворки), но, по моему мнению, это довольно-таки полезно и интересно!
                                          0
                                          спасибо, ознакомился как оно воркает :)
                                          зря
                                          только
                                          вы код
                                          не отформатировали: тег <pre>
                                            0
                                            Отформатировал же... может браузер кеширует?
                                              0
                                              ага, это я заGETил страничку сильно заранее перед тем как прочитать — асинхронным так сказать запросом :)
                                            0
                                            меня всегда так коробит, когда AJAX называют новой технологией .)))

                                            предлагаю велосипед с клаксоном называть качественно новой технологией, нежели велосипед без клаксона .))
                                              0
                                              Я в комментариях выше объяснял, почему я назвал её новой технологией.
                                              0
                                              http://dklab.ru/lib/JsHttpRequest/ - уж лучше тогда новичкам это использовать.
                                              тут и документация есть полная(с примерами), и обработчики для клиента и сервера уже написаны, да и функционал не маленький.
                                              на мой взгляд довольно удобная штука.
                                                0
                                                Да, на dklab.ru оличная библиотека, с очень хорошей документацией, сам пользовал ее.
                                                Но покопавшись в низкоуровневом AJAX, пришло понимание, что дело это неблагодарное, надо использовать готовые фрэймворки, в которых все это скрыто, благо таких фрэймворков уже куча.
                                                0
                                                Очень хорошая статья для новичков! А то молодое поколение активно использует framework'и и толком то и не знает, из чего они состоят.
                                                  0
                                                  Поддерживаю. Узнала все, что нужно для общего представления и для того, чтобы сформулировать свои мысли разработчикам. А программировать мне и не нужно. Автору большое спасибо!
                                                    0
                                                    Восхитительно! Узнал много нового =)
                                                      0
                                                      лучше бы вначале сделали вступление про объекты и как их писать, вместо мусора функций.
                                                      var Ajax =
                                                      {
                                                          send: function() { /* stuff */ },
                                                          show: function() { /* stuff */ }
                                                      }

                                                      всё что нужно новичку - вызубрить хотя бы эту шпору или повесить перед глазами (как я сделал :-), а там будет видно... может и не стоит заниматься вебом.
                                                        0
                                                        В компетенцию статьи про AJAX, я думаю, не входит описание работы с объектами в JavaScript. К тому же, существует не один способ использования создания объектов.
                                                          0
                                                          статья полезна для новичков - не сморю. я высказал свой мнение. лучше бы их сразу учить писать грамотно...
                                                            0
                                                            Вы имели ввиду что-то подобное этому: http://dinamyte.habrahabr.ru/blog/25731.… ?
                                                              0
                                                              да - отличная статья!
                                                                0
                                                                Зачем удалили-то? Только время потерял, комментируя. Или не переделке?
                                                                  0
                                                                  Дорабатываю с учётом всех замечаний.
                                                          0
                                                          Я как раз заказал AJAX для профессионалов у Нигмы:) Как ловко попал))
                                                            0
                                                            Вот видите, как бывает... (:
                                                            0
                                                            Добавьте кто-ть что-ли плиз ссылку на хорошую статью, у меня репы не хватает)
                                                            title: Creating an AJAX Rating Widget
                                                            url: http://www.progressive-coding.com/tutorial.php?id=6
                                                            В статье подробно и с примерами рассказано как сделать ajax виджет рейтингов с анимацией, рассмотрено его подключение к серверной стороне и использование различных фремворков:
                                                            - dojotoolkit
                                                            - mootools, йеа, бэйби!
                                                            - jQuery
                                                            - prototype
                                                            код прилагается
                                                              0
                                                              Википедия
                                                              0
                                                              Люди, знающие AJAX
                                                              подскажите, как сделать чтобы кодировка не глючила в данных AJAX закладках
                                                              http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/
                                                              вставлюю русский текст в файлы, которые подгружаются, и все - кракозябры
                                                                0
                                                                Следи за кодировкой, которую ты используешь. Отсюда, чаще всего, все проблемы.
                                                              0
                                                              Спасибо!
                                                                0
                                                                Не за что. (:
                                                                0
                                                                www.xajaxproject.org решает
                                                                  0
                                                                  Всё супер, спасибо за статью, НО!!! В ИЕ не работает :((
                                                                  Почему?
                                                                    0
                                                                    Странно, я проверял в IE - у меня работали обозначенные примеры. Сегодня вечером посмотрю ещё раз.
                                                                      0
                                                                      Посмотрите если не сложно. Возможно я что то делаю не так. Но вроде всё сделал правильно.
                                                                  • UFO just landed and posted this here
                                                                      0
                                                                      Нужно использовать то, что удобно использовать, я считаю.
                                                                      • UFO just landed and posted this here
                                                                          0
                                                                          Я про то и говорю.
                                                                      0
                                                                      Большое спасибо)))
                                                                        0
                                                                        лучшая статья в Рунете, спасибо!
                                                                          0
                                                                          Можно ли, используя Вашу функцию, реализовать вызов пользовательской функции при успешном ответе сервера?
                                                                            0
                                                                            Да запросто.
                                                                              0
                                                                              Нда... что-то я дуплю видимо сегодня.

                                                                          Only users with full accounts can post comments. Log in, please.