Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP] Przesyłanie danych do sesji
Forum PHP.pl > Forum > XML, AJAX > AJAX
marrrecki
Witam.
Poprzez AJAX wysyłam dane do pliku php. Plik dodaje te dane do sesji. Po wysłaniu danych przez Ajax, pobieram z tego samego pliku php wartości sesji, i odkrywam że nie za każdym razem są one zmieniane adekwatnie do tego co wysłałem. Generalnie to chodzi o to, że poprzez ajax ładuję produkty do koszyka. Czasami produkt tam trafi a czasami nie. Skrypt php oraz skrypt ajax nie wykazują żadnych błedów. O co tu może chodzić?
Cezar708
na wstępie przychodzą mi trzy możlwiości:

1. inna nazwa sesji w "normalnym działaniu aplikacji" a w "skryptach ajaksowych", więcej o nazwie sesji w opisie funkcji session_name()

2. niepoprawna autoryzacja, być może autoryzyjesz jakość użytkownika, a potem korzystasz całkowiecie z innych zmiennych sesyjnych w skryptah ajax niż w normalnych...

3. połączenie asynchoniczne (ajaksowe) nie dochodzi tam gdzie powinno, co nie zgłasza błędu tylko może być błędem logicznym.

pozdrawiam
Cezar708
marrrecki
Tak wygląda kod odpowiedzialny za wysyłanie danych do pliku php. Jak widać dopeiro po zakończeniu wysyłania danych do pliku wywoływana jest funkcja odświeżająca koszyk.
  1. function add_cart(id){
  2. var qty = document.getElementById('pro_'+id);
  3. if(qty.value == 0){
  4. qty.value = 1;
  5. }
  6.  
  7. var tr = document.getElementById('pro_tr_'+id);
  8. tr.className = 'incart';
  9.  
  10. var showDiv = document.getElementById('cart');
  11. xmlHttp = getHTTPObject();
  12. if (xmlHttp != null) {
  13. var url = "req.php?id="+id+"&qty="+qty.value;
  14. var params = "";
  15. xmlHttp.open("GET",url,true);
  16. xmlHttp.onreadystatechange = function() {
  17. if(xmlHttp.readyState==4){
  18. resp = xmlHttp.responseText;
  19. showDiv.innerHTML = resp;
  20. } else {
  21. showDiv.innerHTML = '';
  22. }
  23. }
  24. xmlHttp.send(params);
  25. }
  26. update_cart_box();
  27. }
  28.  
  29. function update_cart_box(){
  30. var cart_box = document.getElementById('shopping_cart_box');
  31. cart_box.innerHTML = '';
  32. xmlHttp = getHTTPObject();
  33. if (xmlHttp != null) {
  34. var url = "req.php?action=update_box_cart";
  35. var params = "";
  36. xmlHttp.open("GET",url,true);
  37. xmlHttp.setRequestHeader("Content-Type", "text/plain;charset=utf-8");
  38. xmlHttp.onreadystatechange = function() {
  39. if(xmlHttp.readyState==4){
  40. resp = xmlHttp.responseText;
  41. if(cart_box.innerHTML.lenght > 0) cart_box.innerHTML = '';
  42. cart_box.innerHTML = resp;
  43. } else {
  44. cart_box.innerHTML = 'Proszę czekać...';
  45. }
  46. }
  47. xmlHttp.send(params);
  48. }
  49. }

Sesje sprawdzałem - używane są te same (nie ma błędu połączenia w sesjach).

Problem rozwiązany
Zmieniłem sposób wysyłania danych do pliku.php i działa jak należy.
  1. function add_cart(id){
  2. var qty = document.getElementById('pro_'+id);
  3. if(qty.value == 0){
  4. qty.value = 1;
  5. }
  6. var tr = document.getElementById('pro_tr_'+id);
  7. tr.className = 'incart';
  8. xmlHttp = getHTTPObject();
  9. if (xmlHttp != null) {
  10. alert(id);
  11. var url = "req.php?action=add_cart";
  12. var params = "products_id="+id;
  13. params += "&cart_quantity="+qty.value;
  14. xmlHttp.open("POST",url,true);
  15. xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  16. xmlHttp.setRequestHeader("Content-length", params.length);
  17. xmlHttp.setRequestHeader("Connection", "close");
  18. xmlHttp.onreadystatechange = function() {
  19. if(xmlHttp.readyState==4){
  20. update_cart_box();
  21. } else {
  22. //showDiv.innerHTML = 'Proszę czekać...';
  23. }
  24. }
  25. xmlHttp.send(params);
  26.  
  27. }
  28. //update_cart_box();
  29. }
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.