AJAX

**AJAX**, кратенка за Асинхрон ЈаваСкрипт и XML (Asynchronous JavaScript and XML). AJAX е развојна техника за создавање на интерактивни мрежни апликации. Намерата е да се дизајнираат мрежни места кои се кориснички ориентирани, посебно при размена на помала количина на податоци од и кон опслужувачот. На тој начин мрежното место нема да се вчитува секој пат кога корисникот ќе внесе податок или ќе побара да прочита некој податок од опслужувачот. Тоа значи зголемување на степенот на интерактивност, брзина и полезност.
мини|Лого на AJAX
AJAX техниката се состои во комбинирање на :

* XHTML (или HTML) и CSS, за означување и стилизирање на информациите.
* DOM објектот се манипулира со Скрипт јазик на клиентската страна, најчесто со имплементации на ECMAScript како на пр. JavaScript и JScript, за динамички приказ и зголемена интеракција на корисникот со презентираната информација.
* XMLHttpRequest објектот служи за асинхрона размена на податоци со web опслужувачот. Во некои AJAX случаи, се користи објектот IFrame наместо објектот XMLHttpRequest за размена на податоци помеѓу веб клиентот и опслужувачот.
* XML најчесто се користи како формат за трансфер на податоците помеѓу клиентот и опслужувачот. Но може да се користи било кој друг формат, вклучувајќи и HTML, обичен текст, JSON па дури и EMBL. Овие податотеки може да бидат динамички создадени со помош на некоја скрипта на серверска страна.

За разлика од DHTML, LAMP и SPA, AJAX не е технологија само за себе, туку означува термин кој кажува дека се работи за користење на повеќе технологии заедно.

## Историја
Прв овој термин го употребил Џеси Џејмс Гарет (Jesse James Garrett) уште во февруари 2005 година. Гарет често размислувал за ова, при што заклучил дека има потреба од нов термин кој ќе упатува на технологиите кои тој ги предлагал на клиентите.

Значи терминот "Ajax" бил скован 2005 година, но технологијата Ajax започнала десетина години порано со иницијативата на Microsoft за развој на Remote Scripting. Техниките за асинхроно симнување на содржината на постоечките мрежни места без потреба од целосно вчитување датираат уште од времето кога се воведува типот на елемент IFRAME (1996 година во Internet Explorer 3) и типот на елемент LAYER (1997 година во Netscape 4, а напуштен во почетната развојна фаза на Mozilla). Овие елемент типови го содржат атрибутот `src` кој може да преземе било кој надворешен URL, па со вчитувањето на страница која содржи JavaScript може да се манипулира нејзината содржината, значи некои Ajax ефекти можело да се постигнат уште тогаш. Ова множество на технологии на страната на клиентот биле групирани под генеричкиот термин DHTML. Macromedia Flash може исто така, почнувајќи од верзија 4, да вчитува XML и CSV податотеки од опслужувачот без потреба од повторно вчитување на целата страница.

Техниката Remote Scripting на Microsoft (или MSRS, воведена во 1998) е елегантна замена за овие техники, на тој начин што заедно со податоците се повлекува и Java applet преку кој клиентската страна може да комуницира користејќи се со JavaScript. Оваа техника работеше и на Internet Explorer 4 и на Netscape Navigator 4. Подоцна Microsoft го промовира објектотXMLHttpRequest во Internet Explorer 5, стекнувајќи се со престиж користејќи ги овие техники во Outlook Web Access кој доаѓаше со Microsoft Exchange Server 2000 изданието.

Заедницата на веб професионалци, на почетокот остварувајќи соработка преку *microsoft.public.scripting.remote* newsgroup а подоцна преку блог агрегација, успеа да развие повеќе техники за remote scripting со цел да се овозможат доследни резултати во различни прелистувачи. 2002 година направена е модификација  на Microsoft Remote Scripting при што беше направена замена на Java аплетот со XMLHttpRequest објектот.

Откако XMLHttpRequest објекот е имплементран во поголемиот број на прелистувачи во употреба, алтернативните техники се користат се поретко. Но тие сѐ уште се во употреба таму каде што се бара компатибилност со постарите мрежни места или пак во некои специфични апликации.

Исто така, World Wide Web конзорциумот направи неколку Препораки во насока на динамичка комуникација помеѓу опслужувачот и соодветниот агент на корисникот. Да напоменеме дека неколку од овие препоаки се добро поддржани. Како на пример:

* **Element** објектот дефиниран во HTML 4 за вгнездување на соодветни типови во документите, (замена за inline рамки во XHTML 1.1)
* **[[DOM]]** објектот (Document Object Model) Level 3 Load и Save Спецификациите http://www.w3.org/TR/DOM-Level-3-LS/

## Добри и лоши страни
### Добри страни
#### Bandwidth utilization
Со локално генерирање на HTML кодот (од стана на прелистувачот) и само вчитување на потребните податоци со помош на JavaScript, Ajax мрежните места може да бидат вчитувани многу брзо доколку порциите на податоци кои се бараат од опслужувачот се со помал обем. Еден пример за оваа техника е примерот со некоја голема табела која се протега на повеќе страници. Со помош на Ajax, HTML кодот на страницата, како што се ознаките за контрола на изгледот на табелата TD, TR и слично може да бидат генерирани локално од страна на прелистувачот или пак доставени со првата страница. Ако корисникот ги бара следните страници од табелата,само суровите податоци ќе бидат вчитани, а подоцна соодветно претставени од страна на прелистувачот.

#### Интерактивност
Ajax апликациите најчесто се извршуваат на клиентската страна, со манипулација на почетно вчитаното мрежно место. прелистувачот го користи DOM објектот на документот и методите за негова манипулација за менување на прикажаната содржината на документот. Ajax може да се користи за најразлични работи, како на пример ажурирање или бришење на записи во база на податоци, размерување на мрежните места, извршување на едноставни барања, или менување на DOM објектот без потреба од испраќање на комплетните податоци во веб формата до опслужувачот и обратно. Значи само мала количина на сообраќај ќе се генерира помеѓу сервеот и клиентот, согласно со тоа ќе имаме релативно кратко време на одговор од страна на опслужувачот. Ова ни овозможува да развиваме семрежни прилози кои се далеку поинтерактивни, при што корисничиот посредник комуницира побрзо и поефикасно со човекот за разлика од DHTML техниките.

### Лоши страни
#### Употреба на back копчето и bookmark-ови
Семрежните прилози кои користат Ajax најчесто не реагираат на очекуван начин во поглед на употребата на стандардното копчe back вградено во повеќето прелистувачи. При враќање на претходната состојба во прелистувачот со употеба на back копчето, кај динамички мрежни места и кај статички мрежни места не е исто, но корисниците најчесто очекуваат со употреба на back копчето од прелистувачот да ја добијат претходната состојба, но во Ajax апликациите тоа не е така.

Професионалците имаат имплементирано различни решенија за надминување на овој проблем. Некои од решенијата се состојат во користење на невидлив/и IFRAME за да се зачува историјата во поглед на употреата на back копчето од прелистувачот. На пример Google Maps, го извршува пребарувањето во невидлив IFRAME а потоа резултатот го прикажува во соодветен елемент на видливото мрежно место. Козорциумот на Светската пајажина (W3C) не го вклучува *IFRAME* елементот во препораките за XHTML 1.1, а го препорачува *object* елементот.

Друга работа е тоа што кај динамичките мрежни места е тешко да се изврши bookmark на специфична ситуација на апликацијата. Постои решение за овој проблем, најчесто со користење на URL *фрагмент идентификатор* (дел од URL после '#' ) за чување на состојбата, при што им се овозможува на корисниците да се вратат на некоја претходна состојба од апликацијата. Ова е возможно бидејќи повеќето прелистувачи допуштаат преку JavaScript да се врши динамичко ажурирање на URL фрагмент идентификаторот, на тој начин Ajax апликациите можат да знаат која состојба ја бара корисникот. Ова решение исто така ја подобрува употребата на копчето back во прелистувачот. се разбира ова не е комплетно и совршено решение.

#### Време на одговор
Мрежната латенција — или интервалот помеѓу времето на поставување на барањето од страна на корисникот и времето на одговор на опслужувачот, треба сериозно да се има предвид при развој на Ajax апликации. Без добар фидбек до корисникот , мали вчитувања на податоци и соодветна манипулација со XMLHttpRequest објектот, може да дојде предолго доцнење па и замрзнување на содржината на страницата во прелистувачот, нешто што корисникот не го очекува и разбира. Исто така, кога страницата се рендерира, потребно е окото да се рефокусира при промена на содржината. Ова може да доведе до натаможно зголемување на латенцијата. Со користење на визуелни ефекти (како на пример бројачи, лизгачи и сл.) се информира корисникот за активностите кои се одвиваат во позадина.

Општо земено, овој проблем сѐ уште не е задоволително решен до денес.

#### Search Engine Оптимизација
Мрежните места кои се користат со Ajax а има потреба да бидат индексирани од страна на пребарувачките машини (search engines), треба внимателно да бидат дизајнирани за да обезбедат соодветни податоци достапни за јавноста, врски и сл, во формат кој пребарувачките машини може да го прочитаат, бидејќи пребарувачките машини не го извршуваат JavaScript кодот кој е потребен за да Ajax апликациите бидат функционални. Овој проблем не е само проблем кај Ajax.

## Пристапност
Со користење на Ajax технологиите во семрежните прилози се отвораат многу можности за професионалците заинтересирани за WAI accessibility guidelines. Постојат повеќе развојни групи кои работат на проекти за владата на САД кои бараат строга примена на Section 508 Compliance стандарди. Доколку не постои согласност со овие стандарди може да дојде до прекин на договорот за соработка.

Заради ова, развивачите потребно е да обезбедат соодветни опции за корисниците на останатите платформи или прелистувачи кои немаат можност за користење на Ajax технологиите, бидејќи овие технологии се засноваат на особености кои се карактеристични за графичките прелистувачи.

## Поврзано
* Ajax framework
* Комет
* HTTP streaming
* JHR
* Progressive enhancement
* Reverse Ajax
* Rich Internet application
* Single page application
* Web 2.0
* XMLHttpRequest
* Програмски јазик

## Наводи

## Надворешни врски
* AJAX category  on the Open Directory Project.
; Статии
* Jesse James Garrett. “Ajax: A New Approach to Web Applications”, Adaptive Path 
; Упатства
* Ajax:Getting Started  by Mozilla Developer Center.
* Ajax Tutorial with get, post, text and XML examples.
* Presentation  on Ajax Security issues given at the Black Hat security conference.


Категорија:JavaScript програмски јазик
Категорија:Програмски јазици
Категорија:Софтверска архитектура
Категорија:Web 2.0
Категорија:XML
Категорија:Информатика
Категорија:Програмирање