Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przycisk wstecz dla akcji w AJAX
Forum PHP.pl > Forum > Przedszkole
patryk9200
Witam,

Buduję stronę w której wykożystuję prostą funkcję AJAX do podmiany zawartości elementów na stronie
  1. <script type="text/javascript">
  2. var XMLHTTPREQUEST = false;
  3. if (window.XMLHttpRequest)
  4. {
  5. XMLHTTPREQUEST = new XMLHttpRequest();
  6. } else if (window.ActiveXObject)
  7. {
  8. XMLHTTPREQUEST = new ActiveXObject("Microsoft.XMLHTTP");
  9. }
  10. function getData (QUERY, TARGET)
  11. {
  12. if (XMLHTTPREQUEST)
  13. {
  14. var TARGET = document.getElementById(TARGET);
  15. XMLHTTPREQUEST.open("GET", "http://xxxx.pl/request.php?"+QUERY);
  16. XMLHTTPREQUEST.onreadystatechange = function()
  17. {
  18. if (XMLHTTPREQUEST.readyState == 4)
  19. {
  20. TARGET.innerHTML = XMLHTTPREQUEST.responseText;
  21. }
  22. XMLHTTPREQUEST.send(null);
  23. }
  24. }
  25. function ActionHistory(ACTION)
  26. {
  27.  
  28. getData (QUERY, TARGET);
  29.  
  30. }

jak zrobić, żeby można było zbudować przycisk wstecz, który po kliknięciu wywoływał by funkcję ActionHistory()
i cofał do poprzedniej operacji wykonanej za pomocą getData();
Jak zaprogramować funkcję ActionHistory(), która zapamieta wywołania funkcji getData() i po wciśnięniu X razy wstecz przejdzie do wykonanej wtedy akcji?
Identycznie potrzebował bym przycisk dalej, ale myślę, że można to zrobić za pomocą jednej i tej samej funkcji i podając jej tylko np. ActionHistory(-1) lub ActionHistory(1) przechodziło by wstecz lub dalej.
Kombinowałem trochę, ale niestety ne znam na tyle JS żeby to zrobić porządnie, za to znam PHP i orientuję się jak mniej wiecej jak JS działa.
webdice
Przede wszystkim musisz sprawić aby przeglądarka zapamiętywała kolejne linki w historii. Tu z pomocą przychodzi Ci location.hash, czyli Tworzysz linki:

Kod
http://example.com/#home
http://example.com/#show
...


Następnie tworzysz funkcje która co określony czas* sprawdza wartość location.hash i na tej podstawie wczytuje konkretną stronę. Tu z pewnością będziesz potrzebował funkcji setInterval.

* Czas musi być stosunkowo mały, tak aby użytkownik nie odniósł wrażenia że jego akcje wykonywane są z opóźnieniem.
patryk9200
Cytat(webdice @ 2.04.2011, 21:37:03 ) *
Przede wszystkim musisz sprawić aby przeglądarka zapamiętywała kolejne linki w historii. Tu z pomocą przychodzi Ci location.hash, czyli Tworzysz linki:

Kod
http://example.com/#home
http://example.com/#show
...


Następnie tworzysz funkcje która co określony czas* sprawdza wartość location.hash i na tej podstawie wczytuje konkretną stronę. Tu z pewnością będziesz potrzebował funkcji setInterval.

* Czas musi być stosunkowo mały, tak aby użytkownik nie odniósł wrażenia że jego akcje wykonywane są z opóźnieniem.

Rozwiązanie ciekawe, lecz nie nadaje się do mojej strony z tego względu, ze część elementów nie zmienia adresu i na dodatek jest już setki obiektów w PHP napisanych pod ajaxa i trochę by było sporo modyfikacji.
Wszystk będzie odbywało się przez funkcję getData() i dla tego pomyślałem, żeby zapamiętywać jej akcje, tak myślę, tylko nie wiem jak to zrobić, żeby zapamiętywać z funkcji getData() TARGET oraz QUERY w jakimś obiekcie czy coś, a potem odwołując się do starszego elementu cofać, lub odwołując sie do nowszego iść na przód, tylko jak to zrobić?
moga być przykłady, chętnie pogłówkuję, ale sam za słabo znaj jeszcze JS żeby dać sobie radę.
webdice
Jeśli chcesz aby akcje były wykonywane wraz wciśnięciem przycisku wstecz/dalej to nie masz innego wyjścia. Możesz co prawda popróbować z przekazywaniem identyfikatora (coś w rodzaju uchwytu) zapisanego w sesji i na jego podstawie wykonywać akcje, ale to ma swoje minusy i jest niemożliwe do zaimplementowania w pewnych sytuacjach, a zastosowanie tego jest o wiele bardziej problematyczne niż wcześniej wspomniany sposób.
patryk9200
a gdyby to zrobić tak, że najpierw tworzona jest dwu wymiarowa tablica np.
ActionHistory[numer][query]
oraz
ActionHistory[numer][target]
potem serializowana i zapisywana do cookie
a podczas cofania lub przechodzenia dalej odczytywana z cookie, deserializowana?
tylko jak operować na tablicach w JS , posortować, a następnie jak odczytać wcześiejszy element?
jak stworzyć globalną tablicę, do której bedę miał dostęp zarówno wewnątrz funkcji jak i w reszcie dokumentu?

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