Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [advAjax] Ładowanie alternatywnej strony w przypadku błędu
msulik
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


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


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
abc667
post
Post #2





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
msulik
post
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował msulik 6.07.2007, 23:04:12


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
yaro
post
Post #4





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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>


--------------------
Go to the top of the page
+Quote Post
msulik
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


A jak w takim razie powinna wyglądać funkcja foo?


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
son
post
Post #6





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 31.01.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.


--------------------
Warsztat: Apache 1.3.36 | MySQL 4.1.19 | php 5.1.4 | OS Linux SUSE 10.3 x86_64 | Kernel 2.6.22.12-0.1 | Opera 9.5 | Kate
Na warsztacie: Ekartki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 02:48