AJAX dla IE6 Drukuj
Ocena użytkowników: / 1
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
piątek, 16 lipca 2010 15:17

AJAX, czyli Asynchroniczny JavaScript i XML to nowoczesna technologia pozwalająca na komunikowanie się skryptu JS z serwerem bez konieczności przeładowania całego dokumentu.

 

AJAX to tak naprawdę nie jest całkowicie nowa technologia. W ogóle słowo „technologia” jest tu pewną nadinterpretacją. AJAX to nic innego jak sprytne połączenie kilku już wcześniej istniejących technologii. Wszystko tak naprawdę opiera się o jeden obiekt JavaScript – XMLHttpRequest (choć i bez niego można osiągnąć podobne efekty - choćby korzystając z pływającej ramki). Ktoś kto zna JS mógłby z powodzeniem tworzyć witryny w oparciu o AJAKSA, choć mógłby o tym nie wiedzieć. Co więcej X z nazwy pochące od XML wcale nie oznacza, że XML jest niezbędny równie dobrze można dane przesyłać jako zwykły tekst albo jako obiekt JSON (co dla mnie jest wygodniejsze).

 

W przypadku nowoczesnych przeglądarek (włączając w to IE7 i nowsze) istnieje banalny sposób na stworzenie obiektu XMLHttpRequest. Wymagany kod:

var xmlHttp = new XMLHttpRequest();

Niestety w przypadku Internet Explorera 6 takie coś działać nie będzie. Jednak spokojnie – pamiętaj, że IE 6 to najlepsza przeglądarka na świecie*. Można żartobliwie powiedzieć, że potrafi robić nawet to, czego nikt tworząc go nie przewidział. Także tę luke można załatać.

Sposób na wykorzystanie AJAX w IE6:

// utwórz obiekt XMLHttpRequest

	var xmlHttp = createXmlHttpRequestObject();

	// tworzy obiekt XMLHttpRequest

	// wykorzystanie wzorca fabryki obiektów

	function createXmlHttpRequestObject() {

	    var xmlHttp;

	    try {        // to powinno działać w nowoczesnych przeglądarkach

	        xmlHttp = new XMLHttpRequest();

	    } catch(e) {

	        // dla IE 6 i starszych

	        var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',

	                    'MSXML2.XMLHTTP.5.0',

	                    'MSXML2.XMLHTTP.4.0',

	                    'MSXML2.XMLHTTP.3.0',

	                    'MSXML2.XMLHTTP',

	                    'Microsoft.XMLHTTP');

	 

	        for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {

	            try {

	                // próbuje utworzyć obiekt XMLHttpRequest

	                xmlHttp = new ActiveXObject(XmlHttpVersions[i]);

	            } catch (e) {}

	        }

	    }

	return xmlHttp; // zwracamy obiekt

	}

Jak można łatwo zauważyć porównując listing 1 i 2, IE6 wymaga sporego nadpisania kodu. Oczywiście ma to wpływ na szybkość działania strony. Dodatkowo warto pamiętać, że IE6 nie ma tak sprawdznego silnika JS jak najnowsze przeglądarki, więc kod ten w IE6 będzie działał wolniej niż w nowszych programach – dlatego choćby warto pobrać z internetu nowszą przeglądarkę. Nie zmiania to faktu, że kod z listingu 2 pozwala wykorzystywać bardzo popularną technologię na naszych stronach bez konieczności rezygnowania z ok. 10% klientów (a więc i 10% potencjalnych zysków). Klient nie zawsze musi korzystać z oprogramowania z jakiego my chcielibyśmy, by on korzystał. Nam za to zawsze zależy na jak największych zyskach.

Sądzę, że lepszym sposobem na walkę z IE jest wykorzystanie frameworków JS, np. jQuery. Dzięki nim można pisać szybciej, efektowniej, a o kompatybilność dba dana biblioteka.

--

* ten program ma już blisko 10 lat, a mimo to potrafi w ogóle wyświetlić dzisiejsze strony. Uważam to za sukces. Nie zmienia to faktu, że jest już stary i jego czas w Internecie dawno powinien się skończyć.