Archive for the 'ajax' Category

AJAX без использования обьекта XmlHttpRequest

Thursday, November 2nd, 2006

Warning: file_get_contents(http://jug.in.ntu-kpi.kiev.ua/glossary/get) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/htdocs/blog/wp-content/plugins/jug-glossary.php on line 40

Оригинал

Введение

AJAX стал самым большим “открытие” последних лет, AJAX так же стал “умным” словом :) почти таким же как Web 2.0. Общепризнано, что аякс это прикольная штука и с её помощью можно делать интересные фичи для web апликух. Прямо сейчас, когда вы читаете эти строчки, аякс уже используется на многих популярнейших сайтах. Наиболее известными являются GMail и Google Maps, хотя Ta-da List или Flickr тоже используют его. Даже Microsoft заразилась аяксоманией, и наваяла либы поддержки AJAX для ASP.NET (привет Java либам DWR & Google Web Toolkit).

Всё было бы отлично, но в текущих реализациях AJAX есть одна существенная проблема - всё завязано на один единственный обьект XmlHttpRequest. Наиболее современные браузеры, вроде FireFox, имеют встроенную поддержку этого объекта. Но старички, вроде IE 6, не имеют встроенной поддержки AJAX и поэтому им приходится использовать левые ActiveX контролы. А это приводит к тому, что у посетителей AJAX-сайта будут выскакивать дурацкие предупреждения о возможной опасности при использовании ActiveX контролов, также пользователи могут вообще отключить в браузере поддержку ActiveX компонентов.

В этой статье я покажу, как использовать Ajax без создания объекта XmlHttpRequest.

Приступаем

Если мы не можем использовать XmlHttpReques, то нам нужно найти какой-то другой способ получения и добавления контента, при этом нужно обойтись без обращения к другим ActiveX обьектам или использования нестандартных методов. Похоже, что наилучшим кандидатом являются внешние JavaScript файлы. Наш подход будет заключатся в использовании динамически созданных на сервере JavaScript файлов. Так как JUG.org.ua посвящен яве, то мы будем использовать JSP :)

Создадим . и положим её на сервер JSP страничку ajax.jsp, в ней будет находится динамический контент, передаваемый клиенту.

<?
String html = “<b>This content came from JSP</b>”;
?>
div = document.getElementById(’contentdiv’);
div.innerHTML = ‘<?=html?>’;

Тут мы с помощью JavaScript кода получаем элемент DIV с айдишкой contentDiv и вставляем в него созданный на сервере контент.

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

Это довольно легко сделать. Cоздадим с помощью DOM хтмл тег SCRIPT и установим в качестве значения атрибута SRС путь к JSP страничке ajax.jsp

function ajax_do (url) {
// url это полный путь к ajax.jsp
// Создаем HTML элемент SCRIPT

var jsel = document.createElement(’SCRIPT’);
jsel.type = ‘text/javascript’;

// установим значение атрибута SRC
jsel.src = url;

// Скармливаем созданный элемент браузеру
// собственно это и есть AJAX-вызов

document.body.appendChild (jsel);
}

Пробуем!

Слепим всё вместе, для этого напишем простенькую HTML страницу, разместим её на сервере,

<html>
<head>

<title>Demo - The Basic’s</title>

<script type=”text/javascript”>
function ajax_do (url) {
// url это полный путь к ajax.jsp
// Создаем HTML элемент SCRIPT

var jsel = document.createElement(’SCRIPT’);
jsel.type = ‘text/javascript’;

// установим значение атрибута SRC
jsel.src = url;

// Скармливаем созданный элемент браузеру
// собственно это и есть AJAX-вызов

document.body.appendChild (jsel);
}
</script>
</head>

<body>
<div id=”contentdiv”> </div>
<input onclick=”ajax_do(’http://localhost/ajax.jsp’);
type=”button” value=”Получить контент” />
</body>
</html>

  • По этой теме можно почитать на http://www.phpied.com/javascript-include/
  • Описанный в статье метод не является AJAX`ом в чистом виде, назовем это AJAX хаком :)