Problem ze zrozumieniem PHP w AJAX

Odpowiedz Nowy wątek
2020-01-14 20:58
0

Cześć, mam problem z poprawnym zrozumieniem AJAX'u w pewnych sytuacjach.
Modyfikowanie i pobieranie z plików JSON to raczej żaden problem, problemy zaczynają się przy użyciu php.

Przykładowo, mam komentarz na stronie i obok łapke/okejke/upvote, która zwiększy ich ilość o jeden. I teraz trzeba użyć Ajaxu, tylko jak to zrobić w poprawny sposób. W pliku upvote.php, za co sie najpierw zabrać:
-spróbować jakoś wykonać kwerende (z użyciem UPDATE), która zwiększy ilość like'ów o 1 (nie wiem do końca czy sie da tak) i potem AJAX'em zwróci rezultat i zupdatuje liczbę lików na stronie?
-może, najpierw pobrać ilość lików, użyć zmiennej co zwiększy o 1 i zwrócić zmienną/wynik do bazy (i potem znowu zwróci ich ilość za pomocą AJAX na stronie)?

Jakbyście to zrobili w pliku .php, bo mówie, naprawde sie pogubiłem, cieżki temat (pobieranie kwerend (mysqli_num_rows) i insert nowych rzeczy np ($stmt_execute), zmienne post/get w skryptach JS php itd)?

edytowany 3x, ostatnio: Janusz Duda, 2020-01-14 21:00

Pozostało 580 znaków

2020-01-14 21:19
2020-01-15 07:42
2

Tak samo, jakbyś to zrobił bez użycia Ajaxa. Ajax to nic innego jak Asynchronous JavaScript and XML. Słowo klucz, to asynchronous, czyli żądanie się wykonuje asynchronicznie, bez przeładowania strony, innymi słowy w tle.

Jedyne, na co musisz uważać, to na sam update.

najpierw pobrać ilość lików, użyć zmiennej co zwiększy o 1 i zwrócić zmienną/wynik do bazy

Tak najlepiej nie robić. Dlaczego?

racecondition.jpg

Jak widzisz poszły dwa update'y, ale wartość wzrosła tylko o jeden. Dlatego w takiej sytuacji lepiej jest zrobić update, który zwiększy wartość o jeden, wtedy baza danych zapewni Ci spójność.

UPDATE table SET likes = likes + 1 WHERE...

Jeżeli chodzi o ilość like'ów, to na dobrą sprawę nie musisz jej zwracać. Możesz zrobić tak:

  1. Użytkownik klika łapkę w górę.
  2. Inkrementujesz ilość like'ów na stronie.
  3. Idzie żądanie na serwer, że trzeba zwiększyć ilość like'ów.
    a) Jeżeli się powiodło, to nic już nie robisz
    b) Jeżeli się nie powiodło, to zmniejszasz ilość like'ów i wyświetlasz ewentualnie jakiś alert, że coś poszło nie tak.

Dzięki temu zaoszczędzisz sobie dodatkowe zapytanie o ilość like'ów.

edytowany 4x, ostatnio: Desu, 2020-01-15 07:49
Dziękuje serdecznie za wyczerpującą odpowiedź. - Janusz Duda 2020-01-15 18:44

Pozostało 580 znaków

2020-01-15 18:43
0

To może mi odpowiesz na jeszcze pare pytań, jak bedziesz miał chwile.
W jednym filmiku na kanale Traversy Media na YT, widziałem, że mówił, żeby nie używać jQuery do Ajaxu a z kolei tona poradników do Ajax (na YT) używa właśnie jQuery.

Chciałem zrobić też tak jak on robi, że używa JSON.parse(response.text), że przerabia zwrócone rezultaty kwerendy w format .json, czy używać tego sposobu? Bo mi to JSON.parse i json.encode(jeśli dobrze pamiętam) nie działał w przeglądarce, ale to nie ważne. Czy ludzie używają takiego sposobu?

Już coś świta troche z tym PHP, jest lepiej niż ostatnio, ale dalej uznaje to za najcięższy temat odkąd zainterowałem sie tematem programowania.

Pozostało 580 znaków

2020-01-16 09:27

Nie wiem, z którego roku był ten film, ale domyślam się, czemu tak powiedział.

Na początku warto zaznaczyć, ze jQuery, to ogromna biblioteka, która miała ułatwić manipulacje HTML (mogłeś dodawać elementy, znajdować je na stronie, modyfilowac ich style i wiele więcej). Robienie requestow Ajax to był taki bonus tej biblioteki. Kilka lat temu mogłeś zrobić request ajax na dwa sposoby. Używając czystego JSa i xmlhttprequest lub właśnie tej dodatkowej funkcji jQuery (która swoją droga pod spodem i tak używała xmlhttprequest, tylko łatwiej się z niej korzystało). Kilka lat temu kazda strona używała jQuery do manipulacji HTML’a, a ponieważ używanie natywnego JS (xmlhttprequest) było niewygodne, to ludzie korzystali z jQuery, skoro i tak już mieli ta bibliotekę w projekcie, bo była im potrzebna do innych rzeczy.

Nie mniej jednak mamy 2020. Do JavaScript została dodana nowa metoda robienia takich zadan i nazywa się fetch API. Jest to dużo wygodniejsze niż poprzedni xmlhttprequest. Obecnie strony nie używają już jQuery, tylko vue, reacta lub angulara do zarządzania htmlem.

Long story short, autor pewnie odradzał użycie jQuery, żeby nie zaciągać tej wielkiej biblioteki tylko po to, żeby użyć 1% jej funkcjonalności. Natomiast jak się uczysz, to nie ma nic złego w tym, ze sobie jej użyjesz. Tona poradników w internecie używa jQuery, bo były robione, jak jQuery było ja topie :)

Alternatywa dla jQuery i natywnego fetch API może być mała biblioteka o nazwie axios. To jest biblioteka, która służy tylko do robienia żądań HTTP. Jaka jest jej zalega nad natywnym fetch API? Ogrywa różne edge case’y i ma trochę łatwiejsza konfiguracje. Ale tak jak jQuery używał pod spodem XMLHttpRequest, tak axios używa fetch API, ty jako użytkownik tej biblioteki zyskujesz to, ze łatwiej Ci robić pewne rzeczy, ponieważ biblioteka nadrabia niedoskonałości natywnego JavaScriptu.

edytowany 5x, ostatnio: Desu, 2020-01-16 09:41
Dziękuje <3 - Janusz Duda 2020-01-17 17:09

Pozostało 580 znaków

2020-01-17 17:09
0

Właśnie widzę, że Vue, React i Angular topuje, ale do końca nie wnikałem w to co to jest i po co. Nie ma może jakieś dobrej alternatywy dla php, której można używać do korzystania z AJAX'u? Pierwszy język, który przyprawia mnie ból głowy, bo raz, że co każdy poradnik, każdy robi parę rzeczy na swój sposób (sprawa oczywista) nie ułatwia mi jego zrozumienia. Ogólnie w zwykłych requestach nie mam problemu, MySQL okazało się bardzo łatwą i przyjemną sprawą, problemy zaczynają się jak chce zrobić więcej rzeczy - coś zupdate'ować, coś wrzucić do bazy i potem zwrócić te dane z bazy, przykładowo. W każdym bądź razie dzięki za opdowiedź a od PHP zrobie przerwe, bo nie moge jemu sprostać (samo jest lekko dla mnie dziwne, ale da sie ogarnąć, lecz gdy próbowałem na siłe ogarnąć ten AJAX wszystko sie sypie). Zostane póki co przy lokalnych plikach .json.

Pozostało 580 znaków

2020-01-17 17:46
0

Możesz użyć node.js. W skrócie to javascript tylko taki, który odpalasz poza przeglądarka.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0