Sprawę można podchodzić z różnych stron. Kilka z nich jest słusznych, kilka trochę mniej.
Złe podejścia do AJAX'a
Megalomania
Na obecnym poziomie AJAX służy do oprogramowywania drobnych elementów na stronie. Najgorszym podejściem jakie aktualnie możesz wybrać jest ładowanie całych stron XML'em. Dlaczego? Pierwszym argumentem jest to co napisałem powyżej - ignorowanie wszystkich ludzi bez JavaScriptu (a jest ich wg rankingów około 10%), drugim jest kompletne zbagatelizowanie problemu SEO. Jako iż większość ruchu na stronach pochodzi z wyszukiwarek, takie podejście może przysporzyć Ci kilku niemiłych dyskusji z Twoim specem od marketingu.
Cloaking
Jeżeli Google nie potrafi czytać Twojego JavaScriptu, czemu nie podstawić mu wersji specjalnie spreparowanej? Sprawę załatwiła dawno temu rzesza spamerów podmieniająca treści stron przygotowane dla Google. Nie chcesz wylecieć z wyników? Nie cloakuj.
Warstwy DHTML'a
Spotkałem się w kilku artykułach, że aby stworzyć Twoją stronę bardziej przyjazną przeglądarką, należy używać mechanizmów warstw w DHTML'u. Wszystko byłoby fajnie, jednak jaki jest sens rozwiązywania braku JavaScriptu .... kolejnym skryptem JS? Całość nie powoduje ani lepszego dostosowania SEO, ani większej dostępności.
Porzucenie AJAX'a
Najprostszą opcją w takim układzie wydaje się porzucenie AJAX'a i wrócenie do technik po stronie serwera. Czy warto jednak rezygnować z tych świetnych efektów i usprawnień po stronie klienta? Nie, jeżeli wiesz co robisz.
Jak zacząć dobrego AJAX'a
JavaScript
Zacznij projektowanie strony z wyłączonym językiem JavaScript. Upewnij się, że każdy jej element działa poprawnie i możliwe jest wygodne, normalne surfowanie po Twojej stronie. Dotyczy to wszystkich elementów onClick i innych akcji.
Kod strony
Jeżeli projektujesz stronę bez użycia JavaScriptu od początki, jedynymi aktywnymi elementami jakie uzyskasz na stronie są <a> oraz <input type="submit">, tracąc bajery jakie możesz uzyskać za pomocą klikalnych div'ów i eventów. Jednak praktycznie wszystkie te efekty możesz uzyskać wykazując trochę więcej kreatywności w tworzeniu stylów kaskadowych oraz kodu.
W tym miejscu, mając dobrze przygotowaną stronę, możemy zabrać się do implementacji AJAX'a. Problemem jest fakt, iż wszystkie aktywne elementy posiadają swoje linki i gdzieś prowadzą. Gdzie tutaj miejsce na swobodę? Z pomocą przychodzi oczywiście JavaScript.
Teraz ten link, w przypadku włączonego JavaScriptu, kompletnie nie zadziała. Jest to martwy link nie powodujący żadnej akcji. W przypadku elementów <input> zamiast onClick należy użyc onSubmit. Zautomatyzujmy to więc.<a href="plik.php" onclick="return false">Link</a>
function disableActions () {
var links = document.getElementsByTagName("a");
for (i=0; i<links.length; i++){
var link = links[i];
link.onclick = function() {return false;}
}
}Po wykonaniu tej akcji wszystkie linki na Twojej stronie będą nieaktywne.Odzyskiwanie funkcjonalności
W tym momencie przychodzi czas na odzyskanie funkcjonalności z użyciem AJAX'a. Dla łatwiejszej identyfikacji, nadajmy aktywnym elementom odpowiednie klasy.
Teraz musimy stworzyć funkcję, która obsłuży funkcjonalność jaką link ten musi zapewnić.<a href="plik.php" class="funcUsun">Usun</a>
Posiadamy już funkcję obsługującą oraz same linki. Jednak nie są one w żaden sposób połączone. Nic prostszego...var allFuncs = new Object();
allFuncs["Usun"] = function() {
// kod ajax w tym miejscu
return false;
}
function disableActions () {
var links = document.getElementsByTagName("a");
for (i=0; i<links.length; i++){
var link= links[i];
link.onclick = allFuncs[getAction(link.className)];
}
}
function getAction(name) {
allNames = name.split("");
for(x = 0; x >< allNames.length; x++) {
if(left(allNames[x], 4) == "func") {
return right(allNames[x], allNames[x].length - 4);
}
}
return "";
}Teraz wszystkie pola o zadanych klasach mają swoje kody obsługujące je w AJAX'ie. Uzyskaliśmy w ten sposób funkcjonalność jaką mieliśmy w przypadku prostej strony.Oczywiście problemem jest oprogramowanie podwójnego interfejsu (AJAX'owego oraz zwykłego) po stronie serwera. Trzeba się więc zastanowić czy warto. Ja uważam, że tak.




0 komentarzy:
Prześlij komentarz