Аякс за 30 секунд
28 Nov, 2005Перевожу заметку с которой я начал свое знакомство с аяксом.
Находится на сайте Rasmus'a - Rasmus' 30 second AJAX Tutorial.
Мой вольный перевод.
Вообще сам Аякс я считаю немного обманом. Многие использовали те же самые приемы задолго до того как они вдруг стали "Аяксом". И эти вещи совсем не такие сложные как многие считают. Вот простой пример из одного из моих приложений.
Сначала Javascript:
function createRequestObject() {
var ro;
var browser = navigator.appName;
if(browser == 'Microsoft Internet Explorer'){
ro = new ActiveXObject('Microsoft.XMLHTTP');
}else{
ro = new XMLHttpRequest();
}
return ro;
}
var http = createRequestObject();
function sndReq(action) {
http.open('get', 'rpc.php?action='+action);
http.onreadystatechange = handleResponse;
http.send(null);
}
function handleResponse() {
if(http.readyState == 4){
var response = http.responseText;
var update = new Array();
if(response.indexOf('|' != -1)) {
update = response.split('|');
document.getElementById(update[0]).innerHTML = update[1];
}
}
}
Этот код создает обьект запроса, сам запрос и функцию для его принятия и распарсивания(по названиям, собственно, нетрудно догадаться). Для использования вам нужно включить этот скрипт в вашу страницу. (<script type="text/javascript" src="js.js"></script>)
Теперь для того чтобы послать запрос нужно его прицепить к какому-нибудь событию. Например onclick или поместив прямо в href вот так:
- <a href="javascript:sndReq('foo')">[foo]</a>
В rpc.php у вас может быть примерно такой код:
- switch($_REQUEST['action']) {
- case 'foo': /*...action=foo...*/
- /* тут например запрос к базе*/
- echo "foo|foo done";
- break;
- ...
- }
- <div id="foo">
- </div>
- <div id="foo">
- foo done
- </div>
Обобщить этот подход, например для отсылки нескольких переменных, было бы очень просто, примерно так:
- function sndReqArg(action,arg) {
- http.open('get', 'rpc.php?action='+action+'&arg='+arg);
- http.onreadystatechange = handleResponse;
- http.send(null);
- }
А функцию handleResponse можно легко расширить для более интересных целей, чем просто замещение содержимого ДИВа.
Автор - Rasmus
В конце
Вот такая вот статейка. На ее базе мне например хватило 2Кб скрипта для создания вот такой вот фичи для укр.нета (исходники). Не без помощи CB правда. :) Джаваскриптер из меня все же слабенький. Прошу прощения за местами косноязычный перевод - я старался :). Считаю это одним из лучших тюториалов для начала работы с аяксом.Хотя бы потому, что лично мне претит использовать все эти навороченные библиотеки. Это как использовать сложную ЦМС для сайта с 3 статическими страницами. Такие вот ассоциации. И это не говоря о пушках и воробьях.
Ваше мнение по поводу тюториала приветствуется!
var xmlHttp = false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) try { xmlHttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e2) { xmlHttp = false; } } @end @*/ if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); }взято с отсюдаfunction createRequestObject() { var ro; if (window.XMLHttpRequest) { ro = new XMLHttpRequest(); } else { ro = new ActiveXObject('Msxml2.XMLHTTP'); if(!ro) { ro = new ActiveXObject('Microsoft.XMLHTTP'); } } return ro; }header, например: header("Content-type: text/html; charset=UTF-8");