Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][JavaScript][PHP]Dodanie odświeżenia strony do istniejącego kodu
4Axis
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


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ć?

Ten post edytował timon27 14.07.2014, 11:52:24
Go to the top of the page
+Quote Post
4Axis
post
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


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





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Jaki masz adres w przeglądarce kiedy wywołujesz reload?

P.S. Zainteresuj się Ajaxem.
Go to the top of the page
+Quote Post
4Axis
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Spróbuj tak:
window.open(window.location,'_self');
Go to the top of the page
+Quote Post
4Axis
post
Post #7





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


(IMG:http://profesjonalnyretusz.pl/error.jpg)

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ść (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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ź).
Go to the top of the page
+Quote Post
4Axis
post
Post #9





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


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
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie o status tego żądania chodziło.
Ale ok. Przywróć na razie kod JS sprzed zmian (czyli bez reload czy window.open).
Go to the top of the page
+Quote Post
4Axis
post
Post #11





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


ok, wstawiony czysty
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


http://sklep.inkotime.pl/modules/blockcart/ajax-cart.js
Przed linią 263 dodaj reload lub window.open
Go to the top of the page
+Quote Post
4Axis
post
Post #13





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


WOW, pokłony MISTRZU, działa pięknie (IMG:style_emoticons/default/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

Ten post edytował 4Axis 15.07.2014, 11:07:12
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 14.05.2014

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


Super, jeszcze raz dziękuję. Najlepszego
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: 16.09.2025 - 00:41