Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przycisk wstecz dla akcji w AJAX
patryk9200
post
Post #1





Grupa: Zarejestrowani
Postów: 319
Pomógł: 4
Dołączył: 7.02.2009
Skąd: pless

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
webdice
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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





Grupa: Zarejestrowani
Postów: 319
Pomógł: 4
Dołączył: 7.02.2009
Skąd: pless

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


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ę.
Go to the top of the page
+Quote Post
webdice
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
Go to the top of the page
+Quote Post
patryk9200
post
Post #5





Grupa: Zarejestrowani
Postów: 319
Pomógł: 4
Dołączył: 7.02.2009
Skąd: pless

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


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?

.

Ten post edytował patryk9200 2.04.2011, 22:28:45
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 23:09