Wpis ten przeznaczony jest dla bardziej zaawansowanych programistów, którzy używają lub zamierzają używać AJAXa (Asynchronous JavaScript and XML). Chciałbym przybliżyć w nim w jaki sposób poprawnie i bez zbędnych kombinacji obsłużyć odpowiedź takiego asynchronicznego pytania do serwera.
We wszelkich tutorialach i poradnikach nikt nie używa właściwych funkcji. Przynajmniej ja takiego poradnika do tej pory nie widziałem. Na opisywane tutaj funkcje i praktyki natknąłem się przypadkiem podczas przerzucania Codexu. A oto dwa proste narzędzia, jako niezbędne minimum poprawnej obsługi AJAX.
Co najlepsze praktyki te nie są pokazane nawet na zbiorczej stronie tej tematyki: AJAX in Plugins w dokumentacji. Być może w celu uproszczenia zagadnienia, ale jednak warto byłoby wspomnieć w tych listingach, że ważne jest zabezpieczenie itd.
1. Nonce
To bardzo przydatne narzędzie do sprawdzenia spójności danych oraz kontrola wywoływania określonych akcji. Po więcej informacji odwiedź Codex – WordPress Nonces.
Używaj funkcji:
- wp_create_nonce() – do zwrócenia sumy kontrolnej
- wp_nonce_field() – do zwrócenia lub wyprintowania całego inputa – gotowego do wstawienia do formularza
Co najważniejsze używaj najbardziej specyficznych ciągów wejściowych. Zamiast ciągu:
'remove_post'
daj:
'remove_post_'.$post->ID
I użyj odpowiednich funkcji do ich sprawdzenia. W przypadku AJAXa użyj: check_ajax_referer().
2. JSON
die(json_encode($data));
Proszę, nie rób tego.
W JS będziesz musiał parsować tego stringa, żeby otrzymać to czego tak na prawdę potrzebujesz.
Użyj natywnych funkcji WordPressa.
Jeśli zakładasz, że zawsze wszystko będzie ok, użyj: wp_send_json()
Jeśli chcesz wysłać z powrotem do JS jakąś informację czy operacja się powiodła czy nie, użyj:
Zwrócony obiekt będzie zawierał dwie własności: pierwsza success, która jest wartością logiczną i przyjmuje kolejno true w przypadku pierwszej funkcji i false w przypadku drugiej. Druga własność to zakodowane do JSONa dane.
Funkcja ta prócz zwykłego printowania JSONa wysyła również odpowiedni nagłówek. Dzięki czemu dane w odpowiedzi traktowane są od razu jako JSON a nie jako zwykły string, z którego musisz dopiero zrobić JSONa.
Na koniec
Mam nadzieję, że jeśli nie znałeś/łaś tych funkcji to zaczniesz ich używać. Jeśli były Ci znane – tym bardziej się cieszę :)
Złota rada na koniec – debuga przeprowadź po stronie JS i użyj do tego console.log() :)
Dzięki wielkie właśnie takich informacji szukałem. Od niedawna używam ajaxa i ciągle mam wrażenie że jestem zielony.Mam nadzieje że więcej znajdę na twoim blogu ciekawych rzeczy.
Dzięki za komentarz! Cieszę się, że informacje się przydały :)
Trafiłeś do mnie z Google?
Witam Kubo. Ja trafiłem do Ciebie przez google :)
Super wpis – tego mi było potrzeba.
Pozdrawiam