Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP]Dodanie odświeżenia strony do istniejącego kodu
Forum PHP.pl > Forum > Przedszkole
4Axis
Witam.
Chcę założyć sklep oparty na prestashop i potrzebowałbym zmodyfikować jedną fukncjonalność. Przy przycisku "Dodaj do koszyka" chciałbym aby dodatkowo odświeżała się cała strona. Jestem laikiem i nie wiem czy coś takiego jest osiągalne.
Doszedłem że fragment kodu, który odpowiada za wykonanie akcji dodawania do koszyka wygląda tak (mam nadzieję że to jest właściwy fragment wink.gif ). Pochodzi z pliku ajax-card.js
  1. overrideButtonsInThePage : function(){
  2. //for every 'add' buttons...
  3. $('.ajax_add_to_cart_button').unbind('click').click(function(){
  4. var idProduct = $(this).attr('rel').replace('nofollow', '').replace('ajax_id_product_', '');
  5. if ($(this).attr('disabled') != 'disabled')
  6. ajaxCart.add(idProduct, null, false, this);
  7. return false;
  8. });
  9. //for product page 'add' button...
  10. $('#add_to_cart input').unbind('click').click(function(){
  11. ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);
  12. return false;
  13. });

pozdrawiam
timon27
Tak, dodaj:
  1. location.reload();

zamiast return.

Tylko że mnie się wydaje że to zły pomysł - użytkownicy nie lubią jak im strona mruga. No i efekt dodawania do koszyka ci zniknie. Ja bym tego nie robił.
Dlaczego tak chcesz zrobić?
4Axis
Chcę pokazać ile punktów rabatowych zostaje klientowi po dodaniu produktu (różnicz pomiędzy wartością zamówienia a zgromadzonymi punktami)

  1. {foreach $displayVouchers as $voucher} {displayPrice price=$voucher.reduction_amount - $cart->getordertotal(true)} {/foreach}


jednak wynik pokazuje się dopiero po odświeżeniu strony. Zrobiłem przycisk obok wartości punktów, ale to wymaga akcji klienta a chciałbym tego uniknąć.
dodałem do kodu coś takiego:
  1.  
  2. $('.refresh-button').click(Function(){
  3. location.reload();
  4. })
  5.  

ale pokazuje i błąd, że produktu nie można dodać do koszyka (pop-up) kiedy jednak kliknę ok dla błędu to produkt wchodzi. NIe wiem jak można inaczej to ugryźć.
trueblue
Jaki masz adres w przeglądarce kiedy wywołujesz reload?

P.S. Zainteresuj się Ajaxem.
4Axis
Cytat(timon27 @ 14.07.2014, 12:51:47 ) *
Tak, dodaj:
  1. location.reload();

zamiast return.

Wyskakuje ten sam błąd co powyżej, potem przeskakuje do koszyka i dodaje produkt sad.gif

localhost/presta-czysta/index.php?id_category=3&controller=category


Cytat
P.S. Zainteresuj się Ajaxem.

z pewnością dobry pomysł, tylko, że nigdy więcej nie będzie mi on potrzebny, więc mam pewne opory wink.gif
trueblue
Spróbuj tak:
window.open(window.location,'_self');
4Axis


Błąd wyskakuje jednak po kliknięciu "OK" produkt się dodaje do koszyka i strona się przeładowuje. Kod do wyświetlania błędu poniżej, możę da się uniknąć wyskawiwania tego komunikatu?


  1. error: function(XMLHttpRequest, textStatus, errorThrown)
  2. {
  3. alert("Impossible to add the product to the cart.\n\ntextStatus: '" + textStatus + "'\nerrorThrown: '" + errorThrown + "'\nresponseText:\n" + XMLHttpRequest.responseText);
  4. //reactive the button when adding has finished
  5. if (addedFromProductPage)
  6. $('#add_to_cart input').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
  7. else
  8. $(callerElement).removeAttr('disabled');
  9. }


Dziękuję za wytrwałość wink.gif

Może inne rozwiązanie? czytałem o odświeżaniu DIV-a co x-sekund. Czy taka opcja mogłaby się sprawdzić?
Odświeżanie DIV-a
trueblue
To nie jest problem z przeładowaniem, a z samym Ajaxem.
Otwórz konsolę developerską w przeglądarce i zobacz co się dzieje w zakładce Sieć, z tym żądaniem (jaki status ma odpowiedź, jaka jest odpowiedź).
4Axis
Pokazuje się:
Request URL:http://sklep.inkotime.pl/modules/blockcart/ajax-cart.js
Request Method:GET
Status Code:304 Not Modified
przy zostwionym return false;
  1. $('.ajax_add_to_cart_button').unbind('click').click(function(){
  2. var idProduct = $(this).attr('rel').replace('nofollow', '').replace('ajax_id_product_', '');
  3. if ($(this).attr('disabled') != 'disabled')
  4. ajaxCart.add(idProduct, null, false, this);
  5. window.open(window.location,'_self');
  6. return false;

gdy wytnę return false;
dalej mam 304 dla ajax-card.js + dodatkowa robi przekierowanie do podsumowania koszyka
Adres sklepu poniżej:
Sklep
trueblue
Nie o status tego żądania chodziło.
Ale ok. Przywróć na razie kod JS sprzed zmian (czyli bez reload czy window.open).
4Axis
ok, wstawiony czysty
trueblue
http://sklep.inkotime.pl/modules/blockcart/ajax-cart.js
Przed linią 263 dodaj reload lub window.open
4Axis
WOW, pokłony MISTRZU, działa pięknie wink.gif dziękuję pięknie

jeżeli to nie nadwyręży Twojego czasu, mógłbyś mi napisać jak podejrzeć
Cytat
jaki status ma odpowiedź, jaka jest odpowiedź

w przeglądarce
trueblue
Po prostu podejrzyj żądanie, które jest wywoływane po kliknięciu w koszyk, ale nie teraz kiedy jest reload.

Ale ma to małe znaczenie w związku z rozwiązaniem. Najzwyczajniej reload był wywoływany przed poprawnym zakończeniem żądania Ajax, a pewność taka jest w metodzie success. Możesz ten efekt zobaczyć w zakładce sieć, żądanie będzie "zcancelowane".
4Axis
Super, jeszcze raz dziękuję. Najlepszego
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.