Javascript.RU

Введение в Ajax

Update: Более новый материал по этой теме находится по адресу https://learn.javascript.ru/ajax-intro.

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

Надеюсь, она будет полезна для понимания, что такое AJAX и с чем его едят.

AJAX, или, более длинно, Asynchronous Javascript And Xml - технология для взаимодействия с сервером без перезагрузки страниц.

За счет этого уменьшается время отклика и веб-приложение по интерактивности больше напоминает десктоп.

Например, при нажатии кнопки голосовать - из браузера на сервер будет отправлено сообщение, а сервер ответит браузеру, что голос принят.

Vote

Здесь будет ответ сервера

Технология AJAX, как указывает первая буква A в ее названии - асинхронна, т.е браузер, отослав запрос, может делать что угодно, например, показать сообщение
об ожидании ответа, прокручивать страницу, и т.п.

Вот код кнопки в примере выше:

<input value="Голосовать!" onclick="vote()" type="button" />

При нажатии она вызывает функцию vote, которая отправляет запрос на сервер, ждет ответа, а затем показывает сообщение об этом в div'е под кнопкой:

<div id="vote_status">Здесь будет ответ сервера</div>

Далее мы разберем, как она работает, более подробно.

Для обмена данными с сервером используется специальный объект XmlHttpRequest, который умеет отправлять запрос и получать ответ с сервера. Кроссбраузерно создать такой объект можно, например, так:

function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

Более подробно о деталях реализации AJAX с использованием XmlHttpRequest и других транспортов можно почитать в разделе про общение с сервером.

Здесь мы не будем на этом останавливаться и перейдем сразу к функции vote:

// javascript-код голосования из примера
function vote() {
	// (1) создать объект для запроса к серверу
	var req = getXmlHttp()  
       
        // (2)
	// span рядом с кнопкой
	// в нем будем отображать ход выполнения
	var statusElem = document.getElementById('vote_status') 
	
	req.onreadystatechange = function() {  
        // onreadystatechange активируется при получении ответа сервера

		if (req.readyState == 4) { 
            // если запрос закончил выполняться

			statusElem.innerHTML = req.statusText // показать статус (Not Found, ОК..)

			if(req.status == 200) { 
                 // если статус 200 (ОК) - выдать ответ пользователю
				alert("Ответ сервера: "+req.responseText);
			}
			// тут можно добавить else с обработкой ошибок запроса
		}

	}

       // (3) задать адрес подключения
	req.open('GET', '/ajax_intro/vote.php', true);  

	// объект запроса подготовлен: указан адрес и создана функция onreadystatechange
	// для обработки ответа сервера
	 
        // (4)
	req.send(null);  // отослать запрос
  
        // (5)
	statusElem.innerHTML = 'Ожидаю ответа сервера...' 
}

Поток выполнения, использованный vote, довольно типичен и выглядит так:

  1. Функция создает объект XmlHttpRequest
  2. назначает обработчик ответа сервера onreadystatechange
  3. открывает соединение open
  4. отправляет запрос вызовом send (ответ сервера принимается срабатывающей в асинхронном режиме функцией onreadystatechange)
  5. показывает посетителю индикатор состояния процесса

Серверный обработчик, к которому обращен AJAX-запрос (в примере это vote.php) по сути ничем не отличается от обычной страницы. AJAX-запрос, отправляемый XmlHttpRequest, ничем не отличается от обычного запроса.

Просто текст, который возвращает сервер, не показывается как HTML, а читается и обрабатывается функцией onreadystatechange.

Пример: vote.php для примера с голосованием
<?php
sleep(3);
echo 'Ваш голос принят!';

Технология AJAX использует комбинацию:

  • (X)HTML, CSS для подачи и стилизации информации
  • DOM-модель, операции над которой производятся javascript на стороне клиента, чтобы обеспечить динамическое отображение и взаимодействие с информацией
  • XMLHttpRequest для асинхронного обмена данными с веб-сервером. В некоторых AJAX-фреймворках и в некоторых ситуациях, вместо XMLHttpRequest используется IFrame, SCRIPT-тег или другой аналогичный транспорт.
  • JSON часто используется для обмена данными, однако любой формат подойдет, включая форматированный HTML, текст, XML и даже какой-нибудь EBML

Типичное AJAX-приложение состоит как минимум из двух частей.

Первая выполняется в браузере и написана, как правило, на JavaScript, а вторая - находится на сервере и написана, например, на Ruby, Java или PHP .

Между этими двумя частями происходит обмен данными через XMLHttpRequest(или другой транспорт).

Смысл AJAX - в интерактивности и быстром времени отклика.

В первую очередь AJAX полезен для небольших элементов, связанных с элементарными действиями: добавить в корзину, подписаться, и т.п.

Например, дерево, узлы которого подгружаются по мере раскрытия.

Бесконечное дерево

Например, при редактировании статьи - каждые 10 минут результаты автосохраняются на сервере.

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

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

Google - одна из первых систем, которая предложила "живой поиск", live search. Пользователь печатает поисковую фразу, а система автодополняет ее, получая
список самых вероятных дополнений с сервера.

Код, который это обеспечивает, работает следующим образом.

  • Активируется примерно при каждом нажатии клавиши
    • Время посылки последнего запроса отслеживается
    • Для "обычной" скорости печати - запрос отсылается при каждом нажатии
    • Для "программистской" скорости - каждые несколько нажатий
  • Создается скрытый DIV, который показывается при начале печати
  • DIV заполняется ответом сервера
    • Текущий результат подсвечен, можно перемещаться и выбирать
    • При нажатии правой стрелки, поиск в подрезультатах
  • Результаты кэшируются
    • при нажатии на "удалить", обращения к серверу не происходит
  • Время на осуществление запроса отслеживается для управления частотой запросов к серверу
    • Обычный модем будет обращаться к серверу меньше,
    • Подключение по выделенной линии - запросы идут чаще.

Раз уж взялись за Google - рассмотрим почтовый сервис той же компании, http://gmail.com.

На момент его появления он явился единственным открытым почтовым сервисом, использующим AJAX для следующих фич.

  • Проверка ошибок ввода формы ДО сабмита
    На сервер передается имя пользователя, результат проверки возвращается на страницу.
  • "Мгновенная" загрузка
    Браузер обращается к серверу только за данными, а не обновляет весь громоздкий интерфейс
  • Автоматическая "доставка" писем в открытую папку
    Время от времени отправляется запрос на сервер и, если пришли новые письма, они появляются в браузере.
  • Автодополнение
    Достаточно ввести первые буквы имени адресата, и остальные дополняются автоматически, как в десктоп-приложениях.

Результат: обширная популярность, высокий спрос на account'ы с момента открытия.

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

Условно говоря, мы действуем так:

  1. закидываем удочку
  2. ждем, когда клюнет
  3. клюнуло - включаем подтяжку спиннинга

При асинхронном подходе мы:

  1. вешаем на удило специальный детектор клева, задаем ему тянуть спиннинг, когда клюнет
  2. закидываем удочку
  3. занимаемся другими делами
  4. детектор клева срабатывает, запуская подтяжку спиннинга

Т.е, в синхронном случае удочка постоянно приковывает наше внимание. Ловля рыбы - последовательный процесс.

В асинхронном варианте - мы сначала задали программу, что делать при клеве, а затем опустили удочку ловить и занялись другими делами.
Например, поставили еще 5 таких удочек.

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

Существуют приемы, облегчающие асинхронное программирование, например, отложенный объект Deferred (Twisted,Dojo,Mochikit), но об этом - в отдельной статье.

Вернемся к нашим баранам: браузеру, серверу и, скажем, базе данных.

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

Все процессы выполняются последовательно, один за другим.

Сетевые задержки включены во время ожидания, обозначенное на схеме серым цветом.

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

В асинхронной модели запрос отсылается ("удочка поставлена"), и можно заняться чем-то другим. Когда запрос выполнился ("клюнуло") - запускается заранее
подготовленная программистом функция ("подтянуть спиннинг") показа сообщения сервера.

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

Пользователь может написать комментарии, заполнить и отослать форму и т.п: Могут производиться новые асинхронные запросы.

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

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

Из-за такого разрыва между действием и реальным результатом приложение становится гораздо более чувствительно к ошибкам.

Особенно в случае нескольких одновременных асинхронных запросов, нужно заботиться об очередности выполнения и ответа (race-conditions) и, в случае ошибки, оставлять приложение в целостном (consistent) состоянии.

  • Сложность в реализации
    • Недостаточные возможности браузера (javascript)
    • Асинхронная модель сложнее для отладки
  • Race conditions
    • Неопределена последовательность выполнения
    • Можно делать много одновременных задач ("удочек"), но задача, начатая первой, может окончиться последней.
  • Реакция тут же, но неизвестно, какой будет результат. Усложнена обработка ошибок
    • Ошибок коммуникации - разрыв связи, и т.п.
    • Пользовательских ошибок - например, не хватило привилегий
  • Контроль целостности (bugproof)
    • Например, редактор отправил асинхронный запрос на удаление ветки дерева. Добавление в нее нужно отключить, пока не придет ответ сервера. Если вдруг не хватило привилегий, то операция не удалась.
  • Интерактивность
  • Быстрый интерфейс

Плюсов всего два, зато какие! Овчинка стоит выделки.

Иногда для асинхронных операций необходимо делать различные "финты ушами". Например, хочется сделать drag'n'drop в дереве, т.е перетаскивать статьи из одного раздела в другой мышкой, и чтобы они на сервере в базе данных меняли родителя.

Drag'n'drop - это "взял мышей объект - положил куда надо - готово". Но в асинхронной модели не может быть все прям сразу "готово".
Надо проверить привилегии на сервере, проверить, существует ли еще объект, вдруг его удалил другой пользователь.

Надо как-то показать, что процесс пошел, но результат "ща будет..". А как? В асинхронной модели указатель мыши не может просто так зависнуть над объектом, превратившись в часики.

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

В примере с drag'n'drop также затронута проблема "stale context" - устаревшего контекста.

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

Как правило, для преодоления таких казусов используются следующие средства:

Это когда все знают кто чего делает и на уровне деления полномочий и личного общения такие удаления согласовывают. Вариант заведомо небезопасный, но обычно работающий.

Локинг - блокирование редактируемых документов.

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

Более подробно о локинге и версионности можно почитать, например, в документации к системе версионного контроля Subversion.

Проблема устаревшего контента может быть на 99% решена при помощи мгновенного автообновления.

Браузер держит постоянное соединение с сервером (или делает время от времени корректирующие запросы) - и нужные изменения отсылаются по этому каналу.

Например, в раскрытую ветку дерева иногда подгружаются новые статьи, в открытый почтовый интерфейс - новые письма.

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


Автор: Onis, дата: 15 июля, 2008 - 22:08
#permalink

Всё это уже знал, но статья так легко и интересно написана что прочел еще раз =) 5+


Автор: Alexx (не зарегистрирован), дата: 22 мая, 2009 - 11:50
#permalink

Все это конечно интересно, но где взять конкретные примеры допустим ajax авторизации?


Автор: Орёл, дата: 5 мая, 2010 - 21:35
#permalink

Ну смотри возмём выше указанный пример запрос ajax через эту функцию отправляеш данные в post запрос в .php файл а там уже средставами php делаеш необходимые вычисление,проверку,добавление в базу и т.д а потом возвращаеш результат ,ajax его возвращает


Автор: Гость (не зарегистрирован), дата: 22 июля, 2008 - 12:09
#permalink

Я знаю для чего нужен Ajax! Вот только не знаю с чего начать его изучение!


Автор: Илья Кантор, дата: 22 июля, 2008 - 15:27
#permalink

А что Вы хотите научиться делать? Поконкретнее, если можно.


Автор: Гость (не зарегистрирован), дата: 26 марта, 2009 - 02:04
#permalink

Интересует очевидное - считывание блока контента без перезагрузки всей страницы. Начать можно с того, что юзверь клюкнул кнопку меню. На сервант через Post/Get передана сцылка на запрашиваемую страницу. Движок нашел в базе нужный контент. Что далее, если Ajax ?
Можно даже на примере работы этого сайта. Вот например сделать хреф рядом с Антиспам-вопросом с title='не знаю ответа' . Чтобы при нажатии его, с серванта подгружался калькулятор. А на стороне браузера - выводить его в <див> , а то ведь не все помнят математику (ещё бы интегралов понаписали).
ЗЫ Ещё можно отправлять текст модеру сайта, по мере заполнения текстареа свыше 80%, чтобы неуспев дописать вопрос, юзверь получал ответ :-D


Автор: AzriMan, дата: 26 марта, 2009 - 09:24
#permalink

в примере, который указан выше есть все ответы.
запрос отсылается на "/ajax_intro/vote.html"
результат req.responseText можно вставлять куда угодно, хоть в statusElem.innerHTML

или Вы не об этом?


Автор: Гость (не зарегистрирован), дата: 27 марта, 2009 - 23:24
#permalink

1. Содержимое файла "/ajax_intro/vote.html" ?
2. Можно догадаться, что на событии onClick кнопки Submit подвешена функция Vote() . Вот с этого места поподробнее, если можно.
3. Где вообще форма? Или её отменили в Ajax?
Если был источник, пож укажите.


Автор: Илья Кантор, дата: 28 марта, 2009 - 12:59
#permalink

1. По этому адресу находится серверный скрипт, который засчитывает голос и выдает текст ответа. Текст ответа можно получить в responseText.

2. Да, на клик подвешена функция vote. При клике она вызывается, передает голос на сервер и возвращает ответ.

3. Формы никакой нет, и самбита нет. Есть вызов сервера через XmlHttpRequest.

По поводу источника - вы читаете оригинал статьи.


Автор: Гость (не зарегистрирован), дата: 29 марта, 2009 - 16:28
#permalink

Функция результата голосования возвращает по return значение, которое ПЕРЕДАЁТСЯ в браузер, где присваивается переменной responceText. Потом innеrHТМL передаст его в div, так?
А где задается значение "Ожидается ответ сервера"?

PS. Не спорю, что в Вашем варианте оно работает "без гвоздей". А у меня движок, в котором кое-как сваяли модуль поддержки Ajax...


Автор: Гость (не зарегистрирован), дата: 29 марта, 2009 - 17:23
#permalink

Не заметил сразу прямую выдачу в div через innerHТМL - прошу прощения


Автор: Гость (не зарегистрирован), дата: 29 марта, 2009 - 17:35
#permalink

Спасибо, все фукционирует


Автор: СергейС (не зарегистрирован), дата: 9 июля, 2011 - 03:24
#permalink

А например кнопку подгружаемую по условию можно сделать ?


Автор: Гость (не зарегистрирован), дата: 14 августа, 2008 - 18:13
#permalink

// создать объект для запроса к серверу, функция getXmlHttp будет дана ниже
напишите пожалуйста getXmlHttp. а может я просто неувидел?
заранее спасибо


Автор: palaga (не зарегистрирован), дата: 14 октября, 2008 - 21:43
#permalink

"Вешаем на удило специальный детектор клева"
Я плачу Браво )))


Автор: Гость (не зарегистрирован), дата: 30 октября, 2023 - 15:07
#permalink

Вы пробовали п роверить Sex Cams


Автор: Гость (не зарегистрирован), дата: 20 ноября, 2008 - 12:35
#permalink

все прекрасно понятно =)
только вот чего начать изучение?
допустим php ...поставь apache+mysql+php = изучай а тут не пойму с чего начинать =( что ставить?


Автор: Охотник на зелёных (не зарегистрирован), дата: 1 декабря, 2008 - 17:59
#permalink

Я так подозреваю, что для самого конкретно AJAX`a вообще ничего ставить не нужно. Просто нужен какой-нить блокнот с подсветкой синтаксиса. Ну а для серверной части подойдёт Denwer, но это как вы уже сказали (apache+mysql+php).


Автор: Irin7, дата: 25 декабря, 2008 - 18:45
#permalink

оч клево написано


Автор: Webcaster (не зарегистрирован), дата: 18 декабря, 2008 - 11:38
#permalink

Класс, изучаю вот. Только если нажать на голосовать второй раз (подождав от первого прилично), то ответ придет от сервера настолько быстро, что в итоге у вас залипает фраза "Ожидаю ответа сервера...". Это можно решить как-то?


Автор: Илья Кантор, дата: 28 марта, 2009 - 14:30
#permalink

Интересный баг.

req.send(null); 
document.getElementById('vote_status').innerHTML = 'Ожидаю ответа сервера...'

Единственный вариант, который приходит в голову - send(null) вернуло закешированный ответ, который тут же обработался - и все это до 2й строки.. Но это очень странно, получается что запрос обработался фактически синхронно.


Автор: Regtool (не зарегистрирован), дата: 29 декабря, 2008 - 14:28
#permalink

Классно всё расписано ... а где взять пример аякса для генерации дерева ?


Автор: Valery (не зарегистрирован), дата: 11 апреля, 2011 - 11:19
#permalink

Примеры дерева - в программе Visual DataFlex 16.1 - после установки и загрузки библиотеки AJAX Library 2.3 - есть примеры в директории Examples


Автор: Гость (не зарегистрирован), дата: 11 января, 2009 - 11:33
#permalink

Спасибо за статью. Но вот на мне тоже хотелось бы посмотреть на пример дерева. Ну или отпишите плиз коды функций по обавлению и удалению веток дерева.
Заранее спасибо


Автор: tref (не зарегистрирован), дата: 21 февраля, 2009 - 00:48
#permalink

Классно написано, автору респект!


Автор: Freeman (не зарегистрирован), дата: 13 марта, 2009 - 09:37
#permalink

Хорошая статья мне понравилось и про ajax теперь все ясно стало


Автор: Zed (не зарегистрирован), дата: 26 марта, 2009 - 12:05
#permalink

Зе бест!
Суть аякса я понял.
теперь думается - нужно разобраться с синтаксисом языка и попробовать сделать замену фрэймов.


Автор: melki, дата: 1 апреля, 2009 - 20:04
#permalink

Вопрос-уточнение! я нуб! Если я хочу скачать контент с конкретного сайта, используя свою html-форму (то есть ту, которая на моем компе), а не форму этого сайта, то это подпадает под кросс-доменный скриптинг? или это можно закрыть типовым XmlHttpRequest.


Автор: neznau (не зарегистрирован), дата: 6 апреля, 2009 - 14:06
#permalink

великолепно!))


Автор: rip_serj (не зарегистрирован), дата: 25 апреля, 2009 - 23:13
#permalink

Спасибо за статью!
Отлично разжеванный материал, наконец-то мне стало все ясно с этим аяксом


Автор: Гость (не зарегистрирован), дата: 28 апреля, 2009 - 09:08
#permalink

Очень хорошая статья, но у меня возник вопрос, если надо передать не null запрос а например ассоциотивный массив
ну как blablabla.ru/test.php?key1=var1&key2=var2

как тогда строить req.send
?


Автор: Илья Кантор, дата: 28 апреля, 2009 - 10:09
#permalink

В данном случае просто делаешь URL: /test.php?key1=var1&key2=var2


Автор: Катя (не зарегистрирован), дата: 18 мая, 2009 - 12:05
#permalink

Здравствуйте!

Первая выполняется в браузере и написана, как правило, на JavaScript, а вторая - находится на сервере и написана, например, на Ruby, Java или PHP.

А не могли бы написать для примера с голосованием скрипт PHP? Я поняла, что отправка идет методом GET, а вот как это «ловить» на сервере…
Спасибо


Автор: Илья Кантор, дата: 18 мая, 2009 - 15:22
#permalink

Направлять запрос соответствующему скрипту и в нем все делать. Скажем, /ajax/vote.php


Автор: kamushek, дата: 20 августа, 2010 - 15:24
#permalink

То есть используем метод POST или Get указывая скрипт обработки на сервере там он как то преобразовует данные с ajax в php и тут php связываеться с бд. Так получаеться?


Автор: Гость (не зарегистрирован), дата: 11 апреля, 2011 - 15:54
#permalink

Убейся, что ты здесь вообще делаешь??


Автор: Лаврентий (не зарегистрирован), дата: 19 июля, 2009 - 16:02
#permalink

Чудесная статья . Все понял, кроме одного момента: что на ходится в файле vote.php? Там функция вызывается или что? И как аякс понимает что сервер что то вернул? return или что то другое? Хотелось бы поподробнее.


Автор: Mars803145 (не зарегистрирован), дата: 16 августа, 2009 - 16:02
#permalink

Присоединяюсь к предыдущему вопросу


Автор: Илья Кантор, дата: 16 августа, 2009 - 21:07
#permalink

Добавил в статью информацию, содержащую ответ на ваш вопрос.


Автор: Гость (не зарегистрирован), дата: 7 сентября, 2009 - 12:24
#permalink

У автора статьи есть чувство юмора)


Автор: Гость (не зарегистрирован), дата: 13 сентября, 2009 - 22:10
#permalink

Спасибо за статью. Все бы так писали. Надо ещё разок почитать. хочется влезть в детали.


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2009 - 13:09
#permalink

А как решать проблему с кодировками? Мне требуется посылать ответ написанный кирилицей. В этом случае браузеры отображают билеберду.


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2009 - 13:23
#permalink

Возможно есть более продвинутые способы, но я в php-скрипте, который возвращал мне ответ, все русские буквы прогонял через функцию iconv и менял кодировку


Автор: Илья Кантор, дата: 4 октября, 2009 - 23:28
#permalink

XmlHttpRequest всегда приходит в UTF. Тут уж ничего не поделаешь - либо переходить на UTF-8, либо перегонять iconv ...


Автор: Гость (не зарегистрирован), дата: 11 апреля, 2011 - 15:55
#permalink

В php.ini
default_character_set=cp1251
подобная строчка должна быть где-то в файле.


Автор: dizelbox (не зарегистрирован), дата: 4 октября, 2009 - 23:25
#permalink

Все преимущества использования AJAX на лицо. Очень хорошо статья написана.


Автор: Иван Рожков (не зарегистрирован), дата: 9 октября, 2009 - 23:21
#permalink

день добрый, а как можно реализовать прогрузку контента с помощью ajax, если:
Станичка использует фрэймвок mootools.
На ней разные эффекты, соответственно.
Есть, допустим, место -

А туда нужно ajax'oм подгрузить не просто текст, а несколько "виджетов" mootools, которые после подгрузки связались бы с фрэймвоком и стали бы работать.


Автор: LestaD (не зарегистрирован), дата: 24 июля, 2011 - 14:58
#permalink

Передай вместо тек4ста ссылки на виджеты с параметрами


Автор: HEX (не зарегистрирован), дата: 5 ноября, 2009 - 20:24
#permalink

Давно искал пример проверки логина при регистрации без перезагрузки страницы. Нигде не мог найти внятного обьяснения или рабочего примера. Сделал по типу описаного тут голосования, всё заработало. Короч, наманая статья


Автор: lotusjs, дата: 12 ноября, 2009 - 22:24
#permalink

В чем суть Ajax? Вижу только конструкции явыскрипт и пиашпи!


Автор: Zubik (не зарегистрирован), дата: 17 ноября, 2009 - 10:37
#permalink

Отличная статья! Спасибо автору


Автор: Chaynik (не зарегистрирован), дата: 18 ноября, 2009 - 15:25
#permalink

ajax все больше укрепляет свои позиции в реализации интерактивности сайта
Статья 5+


Автор: Бобр, дата: 21 января, 2010 - 13:28
#permalink

Скопировал ваш код с кнопкой "Голосовать", на страничку, которая у меня на винчестере. Запустил - надпись "ОК" в теге появилась, но никакой alert не появляется. Стал изучать, оказывается req.status равно нулю. Почему? Что не так?

Я изменил строчку адреса на такую:

req.open('GET', 'http://javascript.ru//ajax_intro/vote.php', true);

Правильный адрес?

Или что я не правильно делаю?


Автор: Гость (не зарегистрирован), дата: 30 января, 2010 - 21:00
#permalink
if ($en == true) {echo 'privet';}
if ($en == false) {echo 'ghbdtn';}

Автор: Гость (не зарегистрирован), дата: 10 сентября, 2011 - 11:13
#permalink

$en ? echo 'privet' : echo 'paka';


Автор: Glinkz, дата: 31 января, 2010 - 12:30
#permalink

У меня вопрос... как изменить кодировку сообщения, приходящего с сервера..?
Все вроде бы нормально, но ответ, который потом выдается Alert-ом содержит в себе "Сервер ответил: (тут куча непонятных иероглифов)"

p.s. все файлы сохранены в кодировке Windows-1251


Автор: B@rmaley.e><e, дата: 31 января, 2010 - 17:31
#permalink

Отправить соответствующий заголовок.

header("Content-Type: text/html; charset=utf-8")

Автор: Glinkz, дата: 31 января, 2010 - 21:17
#permalink

Ммм по ходу написания скрипта возник вопрос...)
Вот обращение к серверу
req.open('GET', 'scripts/voice.php?val=' + AnyObjectValue + '&val2=' + AnyObjectValue2, true)

AnyObjectValue - это какое нибудь значение какой нибудь переменной

вопрос в том, какой код должен быть на стороне PHP скрипта...?


Автор: B@rmaley.e><e, дата: 31 января, 2010 - 22:48
#permalink

Смотря для чего. Значения переменных val и val2 будут доступны как соответствующие ключи супер-глобального массива $_GET.

$_GET['val']; // AnyObjectValue
$_GET['val2']; // AnyObjectValue2

Автор: Гость (не зарегистрирован), дата: 10 сентября, 2011 - 11:18
#permalink

Посоветовал бы ещё проходится функцией array_walk по всему массиву $_GET для запросов, передающих информацию напрямую в DB, так же можно прикрутить логирование, а в некоторых случаях даже нужно.
И тем не менее я бы не советовал использовать $_GET для передачи данных. $_POST в помощь.


Автор: Bumchik (не зарегистрирован), дата: 9 февраля, 2010 - 16:05
#permalink

Как в функцию, задаваемую для onreadystatechange передать параметр?


Автор: VadimQ, дата: 9 февраля, 2010 - 21:12
#permalink

А как передать данные используя метод POST?


Автор: Гость (не зарегистрирован), дата: 12 февраля, 2010 - 09:01
#permalink

да, как использовать метод POST


Автор: Гость (не зарегистрирован), дата: 4 марта, 2010 - 20:05
#permalink

Первая картинка на 1024 разрешении вылазит на список содержания...


Автор: Гость (не зарегистрирован), дата: 13 марта, 2010 - 10:44
#permalink

А где задается синхронный и асинхронный режимы? Третьим параметром функции open?

А статья так себе... Много воды, смысла мало...


Автор: Гость (не зарегистрирован), дата: 30 марта, 2010 - 04:58
#permalink

Автору спасибо.
Очень познавательный материал


Автор: Sniper, дата: 31 марта, 2010 - 19:00
#permalink

возникла такая проблема:
вместо vote.php я отправляю запрос some.jsp
В some.jsp у меня запускается exe и ловится все, что он выдает в строку, потом выводится на страничку
( out.print(stroka) )
Первый раз все запускается, а потоооом...
Почемуто ответ приходит моментально и содержит результат предыдущего вызова some.jsp ...
Я вижу был такой же баг с vote.php , он как то решился?


Автор: acso (не зарегистрирован), дата: 13 августа, 2010 - 11:56
#permalink

Видимо ответ кешируется.

Я использую такой прием:

xmlhttp.open("POST","some.php?r="+Math.random(), true);

В результате каждый вызов будет "уникальным" и будет возвращаться "некешированное" значение.


Автор: Sniper, дата: 3 апреля, 2010 - 15:10
#permalink

Нашел таки я решение данной проблемы =)

function call(instr)
{
	var stroka=""
    var req = getXmlHttp()
    var tmp =  document.getElementById('ppp')   
    req.onreadystatechange = function() {  
      
        if (req.readyState == 4) { 
   
            tmp.innerHTML = req.statusText 
 
            if(req.status == 200) {			
				stroka = stroka.concat(req.responseText)			
                tmp.innerHTML = stroka;				
            }
        } 
    }
	nocache = Math.random()
//Вот оно!!! добавляем в запрос рандомную переменную 
    req.open('GET', instr+'?nocahce='+nocache, true);  
    req.send(null); 
}

Автор: An43 (не зарегистрирован), дата: 1 июля, 2010 - 11:46
#permalink

Не стоит так делать Это костыль, а не решение. Существует вероятность того, что значения, полученные Math.random() повторятся и тогда пользователь получит устаревший вывод из кэша браузера.
Для того, чтобы не получать ответ из кэша достаточно просто отключить кэширование с помощью тега в скрипте на сервере.
Например:

<meta http-equiv="Pragma" content="no-cache"/>


Автор: An43 (не зарегистрирован), дата: 1 июля, 2010 - 12:27
#permalink

Извиняюсь, так не получится.


Автор: An43 (не зарегистрирован), дата: 1 июля, 2010 - 13:17
#permalink

Хотя, если посылать заголовок скриптом, то прекрасно работает


Автор: Ajax (не зарегистрирован), дата: 3 апреля, 2010 - 19:06
#permalink

всё крута) пасиба) счаЗ буду делать вход на сайт через
Ajax
)
можно сделать кнопку Просмотр в диве через Ajax)


Автор: Dimitri (не зарегистрирован), дата: 15 апреля, 2010 - 16:47
#permalink

Sniper
внимательно вчитываемся 'частые проблемы > кеширование' на xmlhttprequest.ru
там описан еще один вариант обхода кеша, немного больше кода зато больше эффективности

var xmlhttp = getXmlHttp()
xmlhttp.open("GET", uri, false); // синхронный запрос для примера
xmlhttp.send(null);
if(!xmlhttp.getResponseHeader("Date")) {  // 1
  var cached = xmlhttp;
  xmlhttp = getXmlHttp()
  var ifModifiedSince = cached.getResponseHeader("Last-Modified");
  ifModifiedSince = (ifModifiedSince) ? ifModifiedSince : new Date(0); // January 1, 1970
  xmlhttp.open("GET", uri, false);
  xmlhttp.setRequestHeader("If-Modified-Since", ifModifiedSince);
  xmlhttp.send(null);
  if(xmlhttp.status == 304)  {
    xmlhttp = cached;
  }
}

там же, чуть ниже, можно посмотреть разбор кода


Автор: Гость (не зарегистрирован), дата: 27 мая, 2010 - 14:00
#permalink

а почему если нажать на кнопку Голосовать в начале статьи ВТОРОЙ раз то логика нарушается: сначала возникает алерт что типа все ок а потом Ожидаю ответа сервера... и тишина???


Автор: Гость (не зарегистрирован), дата: 27 мая, 2010 - 14:25
#permalink

отвте как увидел позже есть))


Автор: Красный (не зарегистрирован), дата: 14 июня, 2010 - 22:01
#permalink

Используйте запросы POST, потому что браузер их не кеширует и они более защищены!


Автор: Roan (не зарегистрирован), дата: 20 июня, 2010 - 14:58
#permalink

Статья самодостаточна! Кратко и в то же время объемно. Теперь ясно, что Ajax - это ни удочка, ни сети, ни гарпун, а только способ пользоваться всем этим барахлом. И очевидно, что этот способ - для профессионалов рыбной ловли :-)


Автор: Гость (не зарегистрирован), дата: 19 августа, 2010 - 15:39
#permalink

почему не вылетает alert ???


Автор: Гость, дата: 5 октября, 2010 - 12:40
#permalink

Млин, все же все-равно не понятно как через POST отправить пусть скрипту vote.php данные из формы. Ну например, пусть тоже голосование, только есть еще варианты ответов (то есть есть форма с radio), так вот как скрипту vote.php передать значение одного из radio??


Автор: Sерг (не зарегистрирован), дата: 5 октября, 2010 - 23:11
#permalink

Вы пишете "Браузер держит постоянное соединение с сервером (или делает время от времени корректирующие запросы) - и нужные изменения отсылаются по этому каналу"

Можно поподробнее, что значит "держит постоянное соединение"? Ведь наскольо мне известно браузер сокетное соединение не устанавливает, и все реал-тайм обновление через ajax - это просто запросы, отсылаемые серверу автоматически с некой периодичностью. Или я не прав?


Автор: Кость (не зарегистрирован), дата: 23 октября, 2010 - 19:41
#permalink

Не понял юмора насчет проблем со "старым контентом". Технологии распределенных баз данных насчитывают уже десятки лет. Неужели пользователи аяхи избавлены от этого накопленного опыта и знаний?


Автор: Гость (не зарегистрирован), дата: 26 октября, 2010 - 12:25
#permalink

Здравствуйте! Прежде всего, спасибо за крайне полезный цикл статей.

Есть, однако вопрос.
А можно ли через XMLHttpRequest получить с сервера простой текстовый файл (не HTML, XML и пр.) в кодировке cp1251?

До сих пор пробовал -- он его читает, но упорно пытается вернуть в utf8. Соотв., вместо русских букв получается абракадабра.

Как решить проблему с использованием серверных компонент (на сервере крутится ASP) -- примерно представляю. Интересно, решаема ли она без (т.е. исключительно на стороне клиента).

Буду ОЧЕНЬ признателен, если кто подскажет!


Автор: B@rmaley.e><e, дата: 26 октября, 2010 - 21:06
#permalink

Как это ни удивительно, но и HTML документ, и XML документ являются не чем иным, как текстовым файлом. Более того, текстовый файл с единственной строчкой "Hello, world!" является корректным HTML документом (за исключением отсутствия структурных тегов, но современные браузеры умеют обходиться без них, а в HTML5 все эти html, head и body и вовсе необязательны).

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

Ну и учитывая, что сейчас повсеместно распространяется юникод, и сам JS целиком в нем, есть смысл использовать везде юникод.


Автор: Гость (не зарегистрирован), дата: 28 октября, 2010 - 11:58
#permalink

Проблема -- в том, что сам сервер конвертировать документы из CP1251 в UTF-8 не умеет.
А AJAX, соответственно -- не умеет ничего делать с текстами в CP1251.

Единственный выход, похоже -- перекодирование на сервере ("на лету").


Автор: Гость (не зарегистрирован), дата: 24 сентября, 2016 - 10:38
#permalink

kak sdelat goryachiy klavish


Автор: Гость (не зарегистрирован), дата: 28 сентября, 2016 - 08:47
#permalink

ne deloy, podumoy !!!


Автор: AD (не зарегистрирован), дата: 23 ноября, 2010 - 19:10
#permalink

Лучше сначала пытаться определить XMLHttpRequest, а только по том ActiveXObject.
Потому что XMLHttpRequest встроен в IE версии >= 7.

function getXMLHttp()
{
	var XMLHttp = null;
	if(window.XMLHttpRequest)
	{
		try
		{
			XMLHttp = new XMLHttpRequest();
		}
		catch(e){}
	}
	else if(window.ActiveXObject)
	{
		try
		{
			XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){}
		}		
	}
	return XMLHttp;
}

Автор: Гость (не зарегистрирован), дата: 24 ноября, 2010 - 08:55
#permalink

Спасибо большое. Перелистав почти десяток "учебников" только на этой статье наконец "въехал" в технологию.


Автор: nomen, дата: 30 ноября, 2010 - 12:36
#permalink

Ам.. не понятно откуда берутся вот эти цифры?

if (req.readyState == 4)
...
if(req.status == 200)

пардон, вопрос снят )) У кого будут такие же глупые вопросы, смотреть http://xmlhttprequest.ru/


Автор: poorking, дата: 7 декабря, 2010 - 21:22
#permalink

Я тоже не понял как отправлять данные методом POST. Точнее понятно, но какой индекс тогда будет у массива $_POST с тем что я отправил? если бы я отправлял кнопкой submit через форму, в которой поле ввода, например с аттрибутом name="test", то в скрипте бы я обратился $_POST["test"]. А с XMLHttpRequest так не работает. ЗЫ только что со страницы http://xmlhttprequest.ru/, там тоже ничего не сказано


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2010 - 13:42
#permalink

Я тоже был на http://xmlhttprequest.ru/
читаем внимательнее:

send()
Отсылает запрос. Аргумент - тело запроса. Например, GET-запроса тела нет, поэтому используется send(null), а для POST-запросов тело содержит параметры запроса.

// Пример с POST
...
var params = 'name=' + encodeURIComponent(name) + '&surname=' + encodeURIComponent(surname)
xmlhttp.open("POST", 'script.php', true)
...
xmlhttp.send(params)

Вопрос только в том остался, что когда я в script.php
выполняю
echo $_POST["name"]
выводится пустая строка ...


Автор: gyrdym, дата: 29 октября, 2012 - 01:25
#permalink

установи http-заголовок вот так вот: req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');


Автор: Гость (не зарегистрирован), дата: 4 февраля, 2011 - 09:30
#permalink

Есть вопрос, ajax-технология базируется на языке Java Script, что будет если пользователь отключит у себя в браузере Java Script? Я так понимаю ajax-отвалится и весь труд накроется медным тазом( а чтобы такого не случилось надо писать запасной код который сработает в любом случае ). Я правильно понимаю?


Автор: Гость (не зарегистрирован), дата: 5 февраля, 2011 - 05:38
#permalink

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


Автор: отдых в черногории (не зарегистрирован), дата: 10 апреля, 2011 - 18:43
#permalink

у меня вот тоже такая же проблема:
вместо vote.php я отправляю запрос some.jsp
В some.jsp у меня запускается exe и ловится все, что он выдает в строку, потом выводится на страничку
( out.print(stroka) )
Первый раз все запускается, а потоооом...
Почемуто ответ приходит моментально и содержит результат предыдущего вызова some.jsp ...


Автор: jeka (не зарегистрирован), дата: 11 апреля, 2011 - 16:42
#permalink

Не подскажите,как мне при помощи ajax сделать, чтобы при нажатии ссылки в меню слева(меню новостей например), новость отображалась в главной таблице


Автор: Гость (не зарегистрирован), дата: 12 сентября, 2011 - 17:35
#permalink

Отличная статья! Спасибо!


Автор: Гость (не зарегистрирован), дата: 1 ноября, 2011 - 15:21
#permalink

Автор, большое спасибо за чудесную статью! Всё очень толково разьяснено. Респект


Автор: Гость (не зарегистрирован), дата: 7 ноября, 2011 - 17:03
#permalink

> Пример. Google suggest.
DIV заполняется ответом сервера

  • Текущий результат подсвечен, можно перемещаться и выбирать
  • При нажатии правой стрелки, поиск в подрезультатах

Как перехватывать нажатия клавиш? В строке поиска Яндекса так же можно перемещаться по выданным возможным вариантам с помощью клавиш курсора. Но я никак не могу разобраться как это реализовано? Подскажите в каком направлении копать.


Автор: Ramzil_Nixon (не зарегистрирован), дата: 21 ноября, 2011 - 11:17
#permalink

Вот у меня такой вопос.

Я все сделал, работает супер! но есть одна фигня. Текст с сервера не выводиться. в вместо него одно слово: undefined.

Писал так:

function getXmlHttp()
{
	try
	{
		return new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (ee)
		{
		}
	}
	if (typeof XMLHttpRequest!='undefined')
	{
		return new XMLHttpRequest();
	}
}
function goajax()
{
	var start = getXmlHttp(); // Создаем отправку на сервер
	var inc = document.getElementById('incontent'); // Это у нас будет отображать ход выполнения
	start.open('GET', 'include.php', true); // Запрос подготовлен
	start.send(null); // Отправляем запрос в сервер
	inc.innerHTML = 'Ждем ответа сервера';
	start.onreadystatechange = function()
	{
		if(start.readyState == 4)
		{
			inc.innerHTML = '100% завершено';
			if(start.status == 200)
			{
				alert('Все работает '+inc.responseText);
			}
		}
	}
}

В сервере содержиться:

<?php
sleep(3);
echo 'Это ответ от сервера';
?>

Не подскажет, где я ошибся?


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2016 - 14:10
#permalink

Ошибся почти в каждом предложении:

"не выводиться";
"содержиться".

Может сначала в школу, а потом текст с сервера выводить?


Автор: snerf (не зарегистрирован), дата: 22 ноября, 2011 - 08:55
#permalink

помоему респонс текст должен идти со стартом, а не с инком


Автор: Гость (не зарегистрирован), дата: 7 декабря, 2011 - 14:48
#permalink

Отличная статья!
"Смысл AJAX - в интерактивности и быстром времени отклика."
Подскажите пожалуйста, насколько быстро работает AJAX? Можно ли с помощью данной технологии создать динамичную онлайн-игру?


Автор: Гость (не зарегистрирован), дата: 10 мая, 2012 - 10:29
#permalink

Думаю скомпилированные приложения все равно будут работать быстрее (Flash)


Автор: Гость (не зарегистрирован), дата: 10 декабря, 2011 - 16:24
#permalink

Не работает(((
Скопировал даже код предпредыдущего сообщения, на что IE выдал:
Сведения об ошибке на веб-странице
Сообщение: 'null' - есть null или не является объектом
Строка: 35
Символ: 5
Код: 0


Автор: Niksik, дата: 16 января, 2012 - 21:02
#permalink

Вот тебе по легче,тоже создаём XMLHttpRequest

var req = Create();

function Create()
{
    if(navigator.appName == "Microsoft Internet Explorer")
    {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        req = new XMLHttpRequest();
    }
return req;
}

А вообще статья чёткая,понравилась 5+


Автор: Llirik812, дата: 11 февраля, 2012 - 08:57
#permalink

Ramzil_Nixon, я статью еще не доконца прочел, пока разбираюсь. Мне показалось что правильней назначать обработчик перед отправкой запроса:

у Вас:

start.send(null); // Отправляем запрос в сервер
inc.innerHTML = 'Ждем ответа сервера';
start.onreadystatechange = function() ...


Мне кажется, лучше так:
start.onreadystatechange = function() ...
start.send(null); // Отправляем запрос в сервер
inc.innerHTML = 'Ждем ответа сервера';


Автор: Гость (не зарегистрирован), дата: 22 февраля, 2012 - 15:19
#permalink

Подскажите пожалуйста, не работает в ИЕ8 (у меня такая стоит в других не проверял). В остальных браузерах все нормально.

$(".status_bd").click(function(){

var bot = $(this);
var hide = $(this).attr('name');
var number_cat = $(this).attr('value');
$.ajax({
type: "POST",
cache :false,
url: "index.php?option=com_photogallery&task=ajaxstatus",
data: ({h : hide, num : number_cat}),
success: function(response)
{
data = eval("(" + response + ")");
id_cat = data.id_cat;
statys = data.hide;

if(statys ===0)
{
$('#'+id_cat).animate({ opacity: 0.4});
$(bot).text("show");;
$(bot).attr('name',0);

}
else
{
$('#'+id_cat).animate({ opacity: 1});
$(bot).text("hide");
$(bot).attr('name',1);

}

}
});

срабатывает изменение в БД но нет анимации. В шаблоне прописал стили которые проверяют значение в БД и соответственно при нажатии F5 если элемент заблокирован то он остается в полупрозрачном виде. Так вот в ИЕ при нажатии кнопки + потом F5 элемент полувиден, а вот обратно не работает и анимации нет. Спасибо


Автор: Дюк (не зарегистрирован), дата: 29 февраля, 2012 - 16:38
#permalink

Илья, сделайте, пожалуйста, учебник по AJAX более подробным, так сказать "для начинающих". После прочтения учебника по JS этот материал кажется слишком сжатым и "не измельченным", непонятным. Стоит добавить больше примеров, расписать более подробно. Например, в каких случаях нужно использовать GET, а в каких POST? Какой вариант транспорта выбрать, если у меня на странице есть форма для выставления рейтинга, а на другой - большая HTML-форма из 50 разных элементов (поля, списки, флажки....) для загрузки на сервер? Как взаимодействовать с БД, например, с mySQL + php ? На этой странице хотелось бы увидеть пример не с примитивным

echo 'Ваш голос принят!';

а с ветвлением на стороне сервера, например, та же голосовалка: выбираешь "5", сервер возвращает "Вы выбрали 5" и т.д.


Автор: Вусал (не зарегистрирован), дата: 13 апреля, 2012 - 11:20
#permalink

Здравствуйте, а как ajax применять в ASP.NET, не MVC? Что служит обработчиком, вместо страница.php?


Автор: zeran, дата: 27 мая, 2012 - 12:56
#permalink

Доброго времени суток, Илья. Хочу обратиться к Вам за разъяснениями по поводу XMLHttpRequest, т.к. в интернете не нашел ответ на свой опрос (может и не правильно искал).
Суть вопроса такова, примерно:
есть функция, которая возвращает объект xhr (кроссбраузерно). При этом я написал ее таким образом, что если уже есть готовый объект она возвращает его. Но тут возникли проблемы - если первый запрос еще не отработал и создавать второй, то первый абортится (Aborted), печально ((
Решил переделать ф-кцию, чтоб возвращала всегда новый объект XMLHttpRequest, но тут возник вопрос, а не будет ли утекать память??? Что происходит с объектом XMLHttpRequest после того как он отработал???
Может, после обработки результата от запроса объект XMLHttpRequest нужно явно удалять при помощи delete?
Буду очень признателен вам за помощь в данном вопросе.


Автор: Андрейя (не зарегистрирован), дата: 27 сентября, 2012 - 13:31
#permalink

Решил протестировать один пример в денвере с сайта
w3schools.com

<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
}
</script>
</head>
<body>

<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="loadXMLDoc()">Change Content</button>

</body>
</html>

И тут такая ситуация: меняю содержимое файла ajax_info.txt
но через браузер раз за разом выдаётся прежнее содержимое. Так и должно быть, и нормально ли, что оно кэшируется? Спасибо заранее.


Автор: Андрейя (не зарегистрирован), дата: 27 сентября, 2012 - 16:46
#permalink

Ответ нашёл у вас же. Спасибо


Автор: Гость (не зарегистрирован), дата: 29 сентября, 2012 - 18:45
#permalink


Автор: Ranerg, дата: 20 ноября, 2012 - 10:13
#permalink

Почему когда я делаю вот так

if (req.readyState == 1) { alert(1);}

То есть ставлю в событие условие обработки первого состояние запроса, Internet Explorer и FireFox запускают эту функцию два раза.
Помогите мне. Я уже целый день вожусь с этим.


Автор: alex33 (не зарегистрирован), дата: 16 июля, 2013 - 08:45
#permalink
sleep(3)

, а я то думаю, что он не сразу реагирует... Sad


Автор: alex33 (не зарегистрирован), дата: 19 июля, 2013 - 06:18
#permalink

Круто, эта функция (XmlHttp) работает даже в телефонах, проверялось на Samsung, Nokia и Apple iPhone 4.
А я сначала думал что ajax только для компов...


Автор: Foka (не зарегистрирован), дата: 7 января, 2014 - 21:20
#permalink

Случайно наткнулся на статью. Очень доступно написано! Спасибо автору!!!


Автор: Serhiy, дата: 8 января, 2014 - 18:49
#permalink

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


Автор: Гость (не зарегистрирован), дата: 6 марта, 2014 - 10:38
#permalink

Спасибо, начал работать с javascript, понадобился ajax , хороший пример.


Автор: Alex'S, дата: 15 марта, 2014 - 16:42
#permalink

alert("Ответ сервера: "+req.responseText);
req.responseText - пустая строка, хоть убей!


Автор: alex33, дата: 15 марта, 2014 - 19:48
#permalink

if (req.readyState == 4) {
alert("Ответ сервера: "+req.responseText);
}


Автор: Alex'S, дата: 16 марта, 2014 - 05:37
#permalink

if(req.status == 200) {
// если статус 200 (ОК) - выдать ответ пользователю
alert("Ответ сервера: "+req.responseText);
}

Выводит: "Ответ сервера:"
req.responseText - пусто.
req.status == 4 - мимо проходит


Автор: Михаил111 (не зарегистрирован), дата: 17 сентября, 2014 - 07:31
#permalink

$(function(){
$("button").click(function(){
$.get("vote.php",function(result){
$("div").html(result);
})
})
});

P.S. Как то у вас всё сложно...


Автор: Гость (не зарегистрирован), дата: 18 сентября, 2014 - 03:34
#permalink

Для того чтобы сделать запрос тянешь jquery? Молодец.


Автор: Гость (не зарегистрирован), дата: 11 августа, 2019 - 13:00
#permalink

Для того чтобы сделать запрос тянешь jquery? Молодец. ответ


Автор: Гость (не зарегистрирован), дата: 17 октября, 2014 - 10:45
#permalink

хороший текст. спасибо!


Автор: Гость (не зарегистрирован), дата: 28 октября, 2014 - 00:39
#permalink

Alex'S, возможно в php файле возвращаешь через return, а нужно echo.

Пример: vote.php для примера с голосованием
<?php
sleep(3);
echo 'Ваш голос принят!';


Автор: Дима (другой Дима) (не зарегистрирован), дата: 30 декабря, 2014 - 21:54
#permalink

> // span рядом с кнопкой

не span, а div


Автор: Гость (не зарегистрирован), дата: 2 марта, 2015 - 09:45
#permalink

Асинхронность -- это, конечно, хорошо, но иногда нужно без нее. Ну, например, по результатам одного запроса нужно сделать следующий, а по результатам того -- еще один. Матрешку из обработчиков городить? Существует какой-либо способ вернуться из callback, кроме очевидного и глупого -- гонять в основной программе цикл, ожидая установки флага.


Автор: Reflective tape (не зарегистрирован), дата: 15 сентября, 2015 - 04:44
#permalink

Хорошая должность. Спасибо, что поделился.


Автор: Гость (не зарегистрирован), дата: 28 сентября, 2015 - 09:41
#permalink

Скажите пожалуйста, почему не работает постраничная навигация после ajax запроса


Автор: Дмитрий Цечоев (не зарегистрирован), дата: 1 марта, 2016 - 10:16
#permalink

Спасибо за статью. С Ajax имею мало опыта, и Ваша помощь оказалась весьма актуальной.


Автор: Гость (не зарегистрирован), дата: 1 октября, 2018 - 12:04
#permalink

Еще можно почитать о разработке интересные статьи на eqsash.


Автор: samuelddarden (не зарегистрирован), дата: 4 июня, 2019 - 13:59
#permalink

Искал эту информацию. Замечательная информация Я проверю для получения дополнительной информации.... mobile legend bang bang game


Автор: Гость (не зарегистрирован), дата: 8 июня, 2019 - 12:00
#permalink

Хорошая должность. Спасибо, что поделился. Домашнее


Автор: willem (не зарегистрирован), дата: 16 октября, 2019 - 06:31
#permalink

alert("Ответ сервера: "+req.responseText);
req.responseText - пустая строка, хоть убей!
ado stunt cars 2


Автор: Гость (не зарегистрирован), дата: 27 января, 2020 - 00:39
#permalink

Вот тоже наглядный пример js для ajax с применением php. Можете скопировать в исходном коде с сайта https://syb.by


Автор: запрос (не зарегистрирован), дата: 13 апреля, 2020 - 11:38
#permalink

AJAX-запрос, отправляемый XmlHttpRequest, ничем не отличается от обычного запроса. 8 ball pool


Автор: Leo Links (не зарегистрирован), дата: 11 июня, 2020 - 06:49
#permalink

Thank you so much for all of the info! Great find. fence contractor


Автор: Julie Ryan (не зарегистрирован), дата: 11 июня, 2020 - 06:53
#permalink

So helpful! Thank you for everything you did! spokane seo company


Автор: 먹튀검증커뮤니티 (не зарегистрирован), дата: 22 ноября, 2020 - 06:09
#permalink

I have to search sites with relevant information on given topic and provide them to teacher our opinion and the article 먹튀검증커뮤니티


Автор: 소액대출 (не зарегистрирован), дата: 22 ноября, 2020 - 06:09
#permalink

I’m excited to uncover this page. I need to to thank you for ones time for this particularly fantastic read!!
I definitely really liked every part of it and i also have you saved to fav to look at new information in your site. 소액대출


Автор: 안전놀이터 (не зарегистрирован), дата: 3 марта, 2021 - 11:50
#permalink

Pretty nice post. I just stumbled upon your weblog and wished to say that I have truly enjoyed surfing around your blog posts. In any case I will be subscribing to your rss feed and I hope you write again soon 안전놀이터


Автор: Гость바둑이사이트 (не зарегистрирован), дата: 17 апреля, 2021 - 09:39
#permalink

I'm writing on this topic these days, , but I have stopped writing because there is no reference material. Then I accidentally found your article. I can refer to a variety of materials, so I think the work I was preparing will work! Thank you for your efforts. 바둑이사이트


Автор: customized packaging custom boxes (не зарегистрирован), дата: 1 мая, 2021 - 11:22
#permalink

Your site is very good today. My work is according to you.If you want to check out my site please visit my site customized packaging custom boxes


Автор: 먹튀검증사이트 (не зарегистрирован), дата: 19 мая, 2021 - 11:28
#permalink

I will bookmark this site and come to it from time to time. Your writing has been of great help to me.먹튀검증사이트


Автор: 토토사이트 (не зарегистрирован), дата: 20 мая, 2021 - 05:37
#permalink

Youre so right. Im there with you. Your weblog is definitely worth a read if anyone comes throughout it. Im lucky I did because now Ive received a whole new view of this. 토토사이트


Автор: cougarsex (не зарегистрирован), дата: 27 мая, 2021 - 21:23
#permalink

cougarsex - for best sexy chat in UK


Автор: miklas (не зарегистрирован), дата: 28 июля, 2021 - 06:33
#permalink

I need to express my deep gratitude to you. I have bookmarked your site for future updates.
wuxiaworld


Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:21
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:23
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:23
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:24
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:24
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:24
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:24
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:25
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:25
#permalink

Автор: Federico (не зарегистрирован), дата: 27 сентября, 2021 - 16:25
#permalink

Автор: sex treffen (не зарегистрирован), дата: 26 октября, 2021 - 19:09
#permalink

sex treffen is great web platform for casual sex contacts with fine ladies in EU


Автор: 메이저사이트추천 (не зарегистрирован), дата: 12 января, 2022 - 12:37
#permalink

I am really thankful to you for sharing such useful info. Hope you are sharing the same in future. Thanks 메이저사이트추천


Автор: site789 (не зарегистрирован), дата: 20 марта, 2022 - 13:12
#permalink

Автор: maxwell3143 (не зарегистрирован), дата: 22 апреля, 2022 - 22:51
#permalink

Vert informative ContentPatco


Автор: Catja Klose (не зарегистрирован), дата: 3 мая, 2022 - 20:38
#permalink

Reife Ladys é um dos maiores sites de encontros e fósforos em Espanha. Qualquer pessoa com mais de 18 anos de idade pode aderir e utilizar o site para encontrar parceiros e encontros sexuais.


Автор: machinwig21, дата: 9 мая, 2022 - 07:37
#permalink

I lucked out when I found this article. It's needed for the presentation I'm giving


Автор: Ana Castro Manso (не зарегистрирован), дата: 11 мая, 2022 - 20:38
#permalink

Travestis ist einfach zu bedienen, auch für neue Besucher. Es verfügt über mehrere Kategorien - sie helfen den Nutzern, indem sie die Optionen eingrenzen, damit Sie die perfekte Übereinstimmung finden können.


Автор: Sherlyn (не зарегистрирован), дата: 7 июня, 2022 - 19:41
#permalink

What is AJAX and why it is utilized?
AJAX = Asynchronous JavaScript and XML. AJAX is a strategy for making quick and dynamic pages. AJAX permits website pages to be refreshed nonconcurrently by trading modest quantities of information with the server in the background. This implies that it is feasible to refresh portions of a page, without reloading the entire page. Check truckpartsuperstore.ca/blogs/news


Автор: Sherlyn (не зарегистрирован), дата: 7 июня, 2022 - 19:41
#permalink

What is AJAX and why it is utilized?
AJAX = Asynchronous JavaScript and XML. AJAX is a strategy for making quick and dynamic pages. AJAX permits website pages to be refreshed nonconcurrently by trading modest quantities of information with the server in the background. This implies that it is feasible to refresh portions of a page, without reloading the entire page. Check truckpartsuperstore.ca/blogs/news


Автор: 익스트림캔디 (не зарегистрирован), дата: 17 июня, 2022 - 07:55
#permalink

In my opinion, the item you posted is perfect for being selected as the best item of the year. You seem to be a genius to combine 익스트림캔디 and . Please think of more new items in the future!


Автор: Diana Wuttke (не зарегистрирован), дата: 17 июня, 2022 - 20:37
#permalink

Taschengeld Ladies Learnalanguage


Автор: https://blog.grapevine.dk/skattejagt/ (не зарегистрирован), дата: 21 июня, 2022 - 13:58
#permalink

Автор: https://truenorthsocial.com/ (не зарегистрирован), дата: 21 июня, 2022 - 13:59
#permalink

Автор: https://linktr.ee/hafiz3143 (не зарегистрирован), дата: 21 июня, 2022 - 14:01
#permalink

Автор: Earn Money (не зарегистрирован), дата: 30 июня, 2022 - 00:53
#permalink

Good Quality Content


Автор: Earn Money (не зарегистрирован), дата: 30 июня, 2022 - 00:54
#permalink

Автор: Marlies Roese (не зарегистрирован), дата: 30 июня, 2022 - 20:38
#permalink

Sex Augsburg macht es Ihnen leicht, diese sexy, kurvigen Frauen zu finden und zu treffen.


Автор: 열공캔디 (не зарегистрирован), дата: 3 июля, 2022 - 07:30
#permalink

I am contemplating this topic. I think you can solve my problems. My site is at " 열공캔디 ". I hope you can help me.


Автор: Jordan (не зарегистрирован), дата: 8 июля, 2022 - 13:27
#permalink

Very Nice Blog Thanks For Sharing https://etherealparadox.com/


Автор: Jordan (не зарегистрирован), дата: 18 июля, 2022 - 06:10
#permalink

Автор: 바카라사이트 (не зарегистрирован), дата: 26 октября, 2022 - 04:51
#permalink

I have been looking for articles on these topics for a long time. 바카라사이트 I don't know how grateful you are for posting on this topic. Thank you for the numerous articles on this site, I will subscribe to those links in my bookmarks and visit them often. Have a nice day.


Автор: Franklin Black (не зарегистрирован), дата: 7 ноября, 2022 - 05:10
#permalink

AJAX — это не технология, а скорее слово, slope unblocked определяющее «новый» метод объединения существующих технологий.


Автор: Anja Nohr (не зарегистрирован), дата: 18 ноября, 2022 - 21:03
#permalink

Sexanzeige ist eine beliebte Dating-Website für Erwachsene, auf der Singles und Swinger ihre Gefühle füreinander erkunden und, wenn es gut läuft, ein sexuelles Treffen vereinbaren können.


Автор: 온라인카지노 (не зарегистрирован), дата: 22 ноября, 2022 - 06:57
#permalink

I finally found what I was looking for! I'm so happy. 온라인카지노 Your article is what I've been looking for for a long time. I'm happy to find you like this. Could you visit my website if you have time? I'm sure you'll find a post of interest that you'll find interesting.
xdgf


Автор: 카지노사이트 (не зарегистрирован), дата: 25 ноября, 2022 - 11:57
#permalink

Of course, your article is good enough, 카지노사이트 but I thought it would be much better to see professional photos and videos together. There are articles and photos on these topics on my homepage, so please visit and share your opinions.


Автор: 카지노추천 (не зарегистрирован), дата: 30 ноября, 2022 - 06:30
#permalink

Hello, I read the post well. 카지노추천 It's a really interesting topic and it has helped me a lot. In fact, I also run a website with similar content to your posting. Please visit once


Автор: Annika Linnebacher (не зарегистрирован), дата: 9 декабря, 2022 - 21:03
#permalink

Sex Solingen ist der Ort, an dem man nach Sex sucht. Menschen suchen Sex an verschiedenen Orten. Manche gehen in Bars und Clubs, andere nehmen den ersten Kontakt bei anderen gesellschaftlichen Anlässen auf. Aber der beste Ort, um nach Fickfreunden zu suchen, ist online.


Автор: Гость (не зарегистрирован), дата: 7 января, 2023 - 06:11
#permalink

I have read your blog it is very helpful for me. I want to say thanks to you. I have bookmark your site for future updates. 카지노사이트 바카라사이트


Автор: 카지노사이트 (не зарегистрирован), дата: 7 января, 2023 - 10:25
#permalink

I've been searching for hours on this topic and finally found your post. 카지노사이트 , I have read your post and I am very impressed. We prefer your opinion and will visit this site frequently to refer to your opinion. When would you like to visit my site?


Автор: 카지노사이트 (не зарегистрирован), дата: 10 января, 2023 - 06:42
#permalink

I am impressed by the information you have on this blog. It shows how well you understand this subject. 카지노사이트 바카라사이트


Автор: Betsson App (не зарегистрирован), дата: 11 января, 2023 - 21:28
#permalink

Si eres un amante de los deportes y te gusta vivir la emoción de los partidos de una forma diferente, en Betsson Colombia hay un lugar para ti.


Автор: AMBBET168X (не зарегистрирован), дата: 14 января, 2023 - 19:28
#permalink

ambbet wallet ศูนย์รวม คาสิโนออนไลน์ และ สล็อตออนไลน์ แถวหน้าของประเทศไทย เราคือ เว็บคาสิโน ที่มีเกม พนันออนไลน์ ให้ได้เลือกเล่นมากที่สุด


Автор: joshualark (не зарегистрирован), дата: 31 января, 2023 - 10:11
#permalink

I completed both the js parts of his course long ago. Tree Surgeons Eastbourne


Автор: 카지노게임사이트 (не зарегистрирован), дата: 11 февраля, 2023 - 12:06
#permalink

It is my first visit to your blog, and I am very impressed with the articles that you serve. Give adequate knowledge for me. Thank you for sharing useful material. I will be back for the more great post. 카지노게임사이트 But by chance looking at your post solved my problem! I will leave my blog, so when would you like to visit it?!
fdgh


Автор: katenelson092 (не зарегистрирован), дата: 14 февраля, 2023 - 11:08
#permalink

It's like other horror games, but you'll need a strategy to win. The backrooms online version has no terrifying monsters or jump scares.


Автор: earnest crawford (не зарегистрирован), дата: 15 февраля, 2023 - 12:20
#permalink

I have rarely seen tutorial as engaging as this one.


Автор: earnest crawford (не зарегистрирован), дата: 15 февраля, 2023 - 12:21
#permalink

it has helped me more than any college class has. Tree Services High Wycombe


Автор: 카지노사이트 (не зарегистрирован), дата: 22 марта, 2023 - 09:46
#permalink

Hello, I'm happy to see some great articles on your site. Would you like to come to my site later? My site also has posts, comments and communities similar to yours. Please visit and take a look 카지노사이트


Автор: 토토사이트추천 (не зарегистрирован), дата: 3 апреля, 2023 - 06:27
#permalink

What a nice post! I'm so happy to read this. 토토사이트추천 What you wrote was very helpful to me. Thank you. Actually, I run a site similar to you. If you have time, could you visit my site? Please leave your comments after reading what I wrote. If you do so, I will actively reflect your opinion. I think it will be a great help to run my site. Have a good day.


Автор: Pernille Wennink (не зарегистрирован), дата: 5 мая, 2023 - 20:02
#permalink

Seks vrouw staat bekend om hun intensieve matching-algoritme, dus neem de tijd om je profiel zo gedetailleerd mogelijk te maken.


Автор: 안전놀이터 (не зарегистрирован), дата: 8 мая, 2023 - 09:55
#permalink

Hello, I am one of the most impressed people in your article. 안전놀이터 I'm very curious about how you write such a good article. Are you an expert on this subject? I think so. Thank you again for allowing me to read these posts, and have a nice day today. Thank you.


Автор: 먹튀검색 (не зарегистрирован), дата: 14 мая, 2023 - 10:56
#permalink

you are so exciting! I don’t consider i’ve examine some thing like this before. So great to discover any other character with a few proper mind in this issue. 먹튀검색


Автор: 먹튀패스 먹튀검증업체 (не зарегистрирован), дата: 14 мая, 2023 - 13:06
#permalink

after searching into the various weblog 먹튀패스 먹튀검증업체


Автор: https://meoktwi.com/ (не зарегистрирован), дата: 15 мая, 2023 - 06:04
#permalink

I thoroughly enjoyed reading this article, and I must say that it is exceptionally well-written and informative. https://meoktwi.com/


Автор: 먹튀검증 (не зарегистрирован), дата: 15 мая, 2023 - 06:04
#permalink

Anyhow, if you have any suggestions or techniques for new blog owners please share. I know this is off subject but I just had to ask. Thanks! 먹튀검증


Автор: 메이저사이트 (не зарегистрирован), дата: 15 мая, 2023 - 06:05
#permalink

I think You put a great deal of exertion to make this article. I like your work. 메이저사이트


Автор: 온라인바카라 (не зарегистрирован), дата: 15 мая, 2023 - 12:10
#permalink

Hello, I read the post well. 온라인바카라 It's a really interesting topic and it has helped me a lot. In fact, I also run a website with similar content to your posting. Please visit once


Автор: Megan (не зарегистрирован), дата: 1 июня, 2023 - 07:15
#permalink

i would like to say this is an amazing article. thank you and keep doing it.
Dishwaser repair service Overland


Автор: Amdrew (не зарегистрирован), дата: 1 июня, 2023 - 08:58
#permalink

I saw your post and its look amazing to me
foundation repair Aurora


Автор: egresswindows (не зарегистрирован), дата: 1 июня, 2023 - 09:03
#permalink

Thanks for every other informative site.
egress windows Carmel


Автор: egresswindows (не зарегистрирован), дата: 1 июня, 2023 - 09:25
#permalink

The place I get that kind of information written in such an ideal means
Indianapolis egress windows


Автор: vancouverconcreteleveling (не зарегистрирован), дата: 1 июня, 2023 - 09:33
#permalink

Enjoyed to read the article of this page, good work

concrete leveling


Автор: 토토사이트 추천 (не зарегистрирован), дата: 13 июня, 2023 - 11:52
#permalink

Do you know any methods to help reduce content from being ripped off? I’d genuinely appreciate it. 토토사이트 추천


Автор: 플레이포커머니상 (не зарегистрирован), дата: 18 июня, 2023 - 05:57
#permalink

I've been reading all the articles related to 플레이포커머니상 for the past hour, but I don't know why I saw this post now. It seems like very useful information.


Автор: Гость (не зарегистрирован), дата: 27 июля, 2023 - 12:36
#permalink

I was just browsing through the internet looking for some information and came across your blog. I am impressed by the information that you have on this blog. It shows how well you understand this subject. Bookmarked this page, will come back for more. TikTok follower generator


Автор: beginner golf (не зарегистрирован), дата: 31 июля, 2023 - 22:30
#permalink

Envision stirring things up around town to one side of the objective line and feel your hands turning over through the shot. Practice this back to front swing way at the driving reach with different clubs to acquire a superior vibe for the right movement.


Автор: golf slice fix (не зарегистрирован), дата: 31 июля, 2023 - 22:30
#permalink

Автор: Web design in perth (не зарегистрирован), дата: 10 августа, 2023 - 08:25
#permalink

Very nice


Автор: Гость (не зарегистрирован), дата: 16 августа, 2023 - 12:56
#permalink

This is a very hard subject for me to talk about. This problem has never been easy for me. I'm worried about every class. So, I decided to play run 3 game to take my mind off things. Because of this, my mind is less busy and I can learn faster.


Автор: Damien (не зарегистрирован), дата: 28 августа, 2023 - 18:49
#permalink

Thanks for the great post!

Soundproof Windows


Автор: Valves direct (не зарегистрирован), дата: 12 сентября, 2023 - 20:58
#permalink

While ValvesDirect is already a trusted name in the industry, they aim to broaden their reach and serve customers on a global scale. Their dedication to quality, expertise, and customer satisfaction knows no bounds. Visit here irrigation valve manifold assembly


Автор: 일본인출장 (не зарегистрирован), дата: 20 сентября, 2023 - 10:08
#permalink

In a statement issued through its communication channels, the group claimed a unit from its Central Af경상남도출장마사지rica operation had detonated an improvised explosive device that resulted in injuries and damage to police infrastructure.No explosion or any injuries were reported by authorities or local media at the time, though police later confirmed a minor incident had occurred without providing further details.


Автор: ยูฟ่า168 (не зарегистрирован), дата: 8 ноября, 2023 - 18:46
#permalink

Thanks for one’s marvelous posting! I truly enjoyed reading it, you’re a great author.I will remember to bookmark your blog and may come back in the foreseeable future. I want to encourage you continue your great writing, have a nice evening! ยูฟ่า168


Автор: pgslot168z (не зарегистрирован), дата: 8 ноября, 2023 - 19:15
#permalink

Nice blog! Is your theme custom made or did you download it from somewhere? A design like yours with a few simple tweeks would really make my blog jump out. Please let me know where you got your theme. Appreciate it.pgslot168" title="pgslot168" remove="function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,1)}}"> pgslot168


Автор: poppy playtime (не зарегистрирован), дата: 9 ноября, 2023 - 06:04
#permalink

I can confidently say that I am taking pleasure in each and every aspect of it. It is a wonderful website, and you have contributed a lot. Please accept my gratitude. Excellent work! You all maintain a wonderful blog, and you have some very interesting posts. Maintain the high standard you've set.


Автор: UFABET168GO (не зарегистрирован), дата: 10 ноября, 2023 - 19:39
#permalink

ufabet168 เว็บตรง เสถียร ใช้งานง่ายที่สุด


Автор: betflix vip (не зарегистрирован), дата: 16 ноября, 2023 - 13:57
#permalink

betflix vip The vacation trades offered are evaluated a variety of in the chosen and simply good value all around the world. Those hostels are normally based towards households which you’ll find accented via charming shores promoting crystal-clear fishing holes, concurrent of one’s Ocean. Hotels Discounts.


Автор: emmawood (не зарегистрирован), дата: 20 ноября, 2023 - 12:58
#permalink

I have never read such a good article. When you have free time, you can have fun with the apk mod on your phone, which will help you a lot in your work


Автор: BIOBETGAMING (не зарегистрирован), дата: 3 декабря, 2023 - 18:12
#permalink

This is extremely fascinating substance! I have altogether delighted in perusing your focuses and have arrived at the conclusion that you are ideal about a significant number of them. You are incredible. biogaming vip


Автор: Above (не зарегистрирован), дата: 12 декабря, 2023 - 16:32
#permalink

Very nice article Home inspection concord NC


Автор: peacocktv.com/tv (не зарегистрирован), дата: 14 декабря, 2023 - 18:30
#permalink

Awesome Website. Keep Up the good work.
Regards,
peacocktv.com/tv
peacocktv.com/tv
fubo.tv/connect


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2023 - 19:21
#permalink

Thank you for sharing this! This is awesome

Cable tray systems


Автор: ufa168 (не зарегистрирован), дата: 1 марта, 2024 - 18:04
#permalink

Thanks for picking out the time to discuss this, I feel great about it and love studying more on this topic. It is extremely helpful for me. Thanks for such a valuable help again. ufa168


Автор: dyani (не зарегистрирован), дата: 4 марта, 2024 - 15:25
#permalink

Since last year's terms are still part of previous year's vocabulary
And another voice awaits the words of next year bitlife. Making a start also means making an end.


Автор: Cannabis Security Solutions New York (не зарегистрирован), дата: 5 марта, 2024 - 17:01
#permalink

Exploring the educational resources on Javascript.RU has been a rewarding experience, especially with their comprehensive coverage of topics like Ajax and COMET. The tutorials provided by Ilya Kantor offer a solid foundation for understanding asynchronous programming and its significance in modern web development.

Dahlicore stands out as a leading provider of cannabis security solutions in New York, offering innovative and reliable services tailored to the unique needs of the industry. Their expertise in safeguarding cannabis facilities ensures compliance with strict regulations while maintaining a secure environment for both businesses and customers alike. With Dahlicore's cutting-edge technology and commitment to excellence, cannabis businesses can trust in their comprehensive security solutions for peace of mind and operational efficiency.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
16 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum