Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAjax] Ładowanie alternatywnej strony w przypadku błędu
Forum PHP.pl > Forum > XML, AJAX
msulik
Wyobraźmy sobie, że mamy taki link:
  1. <a href="mojSkrypt.php" onclick="return kliknieto(); ">Kliknij</a>

i funkcję:
  1. <script type="text/javascript">
  2. function kliknieto()
  3. {
  4. return advAJAX.get({
  5. url : 'http:/localhost/plik.txt',
  6. onSuccess : function (obj) { /* cos tam */ },
  7. onError : function (obj) { return true; }
  8. });
  9. }

Po kliknięciu wywołana zostanie funkcja "kliknieto()", która dokona advAjaksowego get i w przypadku powodzenia wstawi responseText do jakiejś warstwy. W przypadku błędu chciałbym, żeby strona przeładowała się do skryptu mojSkrypt.php.

Oczywiście powyższy sposób nie zadziała, bo metoda get nie zwraca tego, co mnie interesuje.


Wymyśliłem poniższy sposób, ale wydaje mi się, że jest trochę naokoło. Mianowicie, przekazuję funkcji "kliknieto" alternatywny link, a następnie, w przypadku advAjaksowego onError, przekierowuję przeglądarkę do tejże alternatywnej strony:
  1. <script type="text/javascript">
  2. function kliknieto(strAlternatywnyHref)
  3. {
  4. advAJAX.get({
  5. url : 'http:/localhost/plik.txt',
  6. onSuccess : function (obj) { /* cos tam */ },
  7. onError : function (obj) { document.location = strAlternatywnyHref; }
  8. });
  9. return false;
  10. }
  11. <a href="mojSkrypt.php" onclick="kliknieto(this.href); return false; ">Kliknij</a>


Zarówno link "mojSkrypt.php" jak i funkcja "kliknieto()" będą bardziej wyrafinowane, ale chodzi o ogólną ideę - moją intencją jest, aby strona zawierała elementy ajaksowe, ale w przypadku braku javascripta w przeglądarce lub jakichkolwiek błędów, ma zadziałać tradycyjne kliknięcie.

Powyższy sposób ma jeden mankament, poza estetyką - w przypadku błędu javascriptowego, np. jeśli na jakiejś przeglądarce coś nie zadziała, wówczas ani nie wyświetli się responseText, ani nie zostanie wywołany skrypt mojSkrypt.php, czyli użytkownik będzie klikał do upadłego i nic się nie wydarzy.

Będę wdzięczny za pomysły inne od zaprezentowanego powyżej smile.gif
abc667
  1. <script type="text/javascript">
  2. function kliknieto()
  3. {
  4. var logic;
  5. advAJAX.get({
  6. url : 'http:/localhost/plik.txt',
  7. onSuccess : function (obj) { /* cos tam */ },
  8. onError : function (obj) { logic = true; }
  9. });
  10. if(logic) { return true; }
  11. }

spróbuj takiej wersji
msulik
To nie przejdzie sad.gif
Metoda "get()" zwraca sterowanie natychmiast po wywołaniu, nie czekając na otrzymanie odpowiedzi z serwera; pobieranie pliku.txt odbywa się w tle. Inaczej mówiąc:
  1. <script type="text/javascript">
  2. function kliknieto()
  3. {
  4. var logic;
  5. advAJAX.get({
  6. url : 'http://localhost/plik.txt',
  7. onSuccess : function (obj) { /* cos tam */ },
  8. onError : function (obj) { logic = true; }
  9. });
  10. //////////////////// W tej linii znajdziemy sie od razu, bez oczekiwania na odpowiedz z serwera localhost.
  11. if(logic) { return true; }
  12. }
yaro
Spróbuj:
  1. <a href="foo.html" onclick="return foo(this.href)">link</a>

Aby pod IE7 tez działało:
  1. <a href="foo.html" onclick="return event.returnValue=foo(this.href)">link</a>
msulik
A jak w takim razie powinna wyglądać funkcja foo?
son
W wersji łopatologicznej można ten problem rozwiązać tak, że strona alternatywna jest wyświetlana z marszu (w html), a w przypadku gdy ajax pobierze dane są one wczytywana zamiast tego elementu w którym wcześniej była zawartość alternatywna.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.