Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]Przesłanie zmiennej w 2 miejsca.
Forum PHP.pl > Forum > Przedszkole
kamilo818
Tworze sklep internetowy i mam w nim koszyk, który jest sliderem z boku strony oraz 'zamowienie' z którego user zatwierdza zamówienie.

W sekcji 'zamowienie' user może jeszcze modyfikować zamowienie przez usuniecie przedmiotu lub zwiększenie i zmniejszenie ilosci danego produktu.

Gdy dokonuje tych zmian w sekcji 'zmowienie' zmieniają sie wartości jednocześnie w koszyku i w zamówieniu.

robie to tak:
wysyłam wartosc zmiennej do koszyka i tam w zmiennej $_SESSION['koszyk']; powiększam ilosc danego produktu.
rownież ajaxem odswieżam dane w sekcji 'zamowienie' aby dane uaktualniły się tu i tu.
Zarówno koszyk jak i zamówienie pobiera dane z $_SESSION['koszyk']

  1. $('div.zamowienie b#plus').click(function(){
  2. var n=parseInt($(this).parent('td#ilosc').attr('value')); //powiekszenie wartosci zamowienia
  3. console.log('przed: '+n);
  4. var nr = $(this).attr('nr');
  5. $('td#ilosc').attr('value',n++);
  6. var nowa_ilosc = n++;
  7. console.log('po: '+nowa_ilosc);
  8. var dataString = 'nr=' + nr+'&nowa_ilosc='+nowa_ilosc;
  9. $.ajax({
  10. type: 'get',
  11. url: ('http://page4u.waw.pl/shop/page/koszyk.php'),
  12. data: dataString,
  13. beforeSend: function () {
  14. $('body').append('<div class="loader"><img src="http://page4u.waw.pl/shop/712.gif"/></div>');
  15. },
  16. success: function (obj) {
  17. $('.loader').remove();
  18. $('.koszyk_main').html(obj);
  19. }
  20. });
  21. $.ajax({
  22. type: 'get',
  23. url: ('http://page4u.waw.pl/shop/page/zamowienie.php'),
  24.  
  25. beforeSend: function () {
  26. $('body').append('<div class="loader"><img src="http://page4u.waw.pl/shop/712.gif"/></div>');
  27. },
  28. success: function (obj) {
  29. $('.loader').remove();
  30. $('.zamowienie').html(obj);
  31. }
  32. });
  33. });


I czasami pojawia sie problem, że wartość w koszyku zmienia się prawidłowo a w zamówieniu tak jak by nie. Sądze że poprostu szybciej odświeżyło się 'zamowienie' niz w koszyku została zmieniona wartośc $_SESSION['koszyk'];
Po odswieżeniu 'zamowienia' wartosc jest poprawna a nawet jak zatwierdze zamowienie to wartosc tez jest poprawna, wiec wynik ze $_SESSION['koszyk'] jest poprawnie zmieniona.

Teoretycznie wiem jak to pokonać ale praktycznie nie wiem jak to napisać.
czyli po tym jak przesle ajaxem dane do koczyka i zmieni sie wartośc zamówienia czyli zakonczy sie sukcesem dopiero przsłać dane do 'zamowienie'

Chyba że jakiś inne rowiązanie do tego będzie ?

w koszyku tak zwiekszam ilosc produktów:

  1. if(isset($_GET['nr']) && isset($_GET['nowa_ilosc'])){
  2. if($_GET['nowa_ilosc']>0)
  3. $_SESSION['koszyk'][$_GET['nr']]['ilosc']=$_GET['nowa_ilosc'];
  4. }
nospor
Masz blad logiczny. Gdy koles zwieksza/mniejsza w zamowieniu cos, to masz slac tylko jedno żądanie, np do zamowienia. I tam masz robic obie rzeczy a nie jak teraz slesz dwa oddzielne żądania.
kamilo818
OK.

W takim razie zmieniam cos w zamowieniu przesyłam to do koszyka. W koszyku natępuje faktyczna zmiana w zmiennej $_SESSION['koszyk'].
I jak z poziomu koszyka odświeżyć dane w zamowieniu? Wystarczy samo odswieżenie bo zamowienie pobiera dane ze zmiennej $_SESSION['koszyk'].

Czy nadal zle myśle?
nospor
Akcja, do ktorej slesz info o zmianie, niech ci zwraca wszystkie niezbedne dane. Dane koszyka, dane zamowienia i inne jakie potrzebujesz.
kamilo818
Zapewne mi podsuwasz prawie gotowe rozwiązanie ale nie dochodzi to do mnie sad.gif

Mam zamowienie.php które wyswietla dane z $_SESSION['koszyk']

Mam koszyk.php który też wyświetla dane z $_SESSION['koszyk'] oraz wykonuje operacje dodania, usuniecia, zwiekszenia, mniejszenia produktów w zmiennej $_SESSION['koszyk'].

Jeśli dobrze rozumiem to piszesz mi żebym po zmianie danych w zamowienie.php i przesłaniu ich do koszyk.php, koszyk.php a w zasadzie funkcja która dokonuje zmiany zwracała info o koszyku zamianie i produktach.

Tylko po co? Albo jak to wykorzystać później?




Dobra:
zrobiłem cos takiego i wydaje mi się że działa poprawnie:
  1. if(isset($_GET['nr']) && isset($_GET['nowa_ilosc'])){
  2. if($_GET['nowa_ilosc']>0)
  3. $_SESSION['koszyk'][$_GET['nr']]['ilosc']=$_GET['nowa_ilosc'];
  4.  
  5. ?>
  6. <script type="text/javascript">
  7. jsFunction();
  8. </script>
  9. <?php
  10. }
  11.  
  12. <script type="text/javascript">
  13. function jsFunction(){
  14. $.ajax({
  15. type: 'get',
  16. url: ('http://page4u.waw.pl/shop/page/zamowienie.php'),
  17. beforeSend: function () {
  18. $('body').append('<div class="loader"><img src="http://page4u.waw.pl/shop/712.gif"/></div>');
  19. },
  20. success: function (obj) {
  21. $('.loader').remove();
  22. $('.zamowienie').html(obj);
  23. }
  24. });
  25. }
  26. <script>


Moze tak być?

Z zamowienia przesłane jest do koszyka zadanei ajaxem. W koszyku zwiekszenie nastepuje i po tym wywołuje funkcję do odswieżenia danych w zamowieniu.
nospor
Znowu niepotrzebnie wykonujesz dwa żądania do serwera. No ale ok, jak ci pasuje to rozwiązales swoj problem pierwszego posta smile.gif
kamilo818
zawsze coś.

Ale rozumiem, że nie jest to optymalne rozwiązanie.

Chetnie bym to doprowadził do poprawnej postaci, tylko bym potrzebował bardziej zrozumiałego, rozłożonego na łopatki, krok po kroku wytłumaczenia tongue.gif
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.