Возвращает ответ в виде JSON в асинхронном AJAX-запросе.
«Возвращает» – это не значит, что результат действия функции можно присвоить в переменную. Тут имеется ввиду именно ответ от запроса AJAX.
Функция также прерывает выполнение PHP-кода в запросе функцией wp_die() и добавляет в заголовок ответа Content-Type: application/json
.
На её основе работают очень похожие функции wp_send_json_success() и wp_send_json_error().
Кстати, если вы не чувствуете, что хорошо разбираетесь в асинхронных запросах WordPress, тогда я хочу порекомендовать вам свой видеокурс.
wp_send_json( $response, $status_code = null, $options = 0 )
JSON_FORCE_OBJECT
, JSON_HEX_QUOT
, JSON_UNESCAPED_UNICODE
, JSON_INVALID_UTF8_IGNORE
, JSON_HEX_TAG
, JSON_HEX_AMP
, JSON_HEX_APOS
, JSON_INVALID_UTF8_SUBSTITUTE
, JSON_UNESCAPED_LINE_TERMINATORS
, JSON_NUMERIC_CHECK
, JSON_PARTIAL_OUTPUT_ON_ERROR
, JSON_PRESERVE_ZERO_FRACTION
, JSON_PRETTY_PRINT
, JSON_UNESCAPED_SLASHES
, JSON_THROW_ON_ERROR
В каких же ситуациях нам нужно получать ответ из асинхронного запроса в виде JSON?
Хороший пример – использование в фильтрации товаров. Допустим, что мы получаем несколько отдельных кусков данных из запроса – во-первых, отфильтрованные товары, во-вторых, какой-нибудь счётчик количества, типо «Найдено 5 товаров». И суть в том, что в вёрстке товары и счётчик количества выводятся в обсолютно разных местах. Поэтому мы должны получить их отдельно, чтобы не изменять весь HTML.
Давайте взглянем, как оно происходит непосредственно в JavaScript:
$( '#ajaxfilter' ).submit( function( event ) { event.preventDefault(); const el = $(this); $.ajax({ type : 'POST', url : ajax_url, data : el.serialize(), beforeSend : function( xhr ) { // врубаем анимацию прелоадера например }, success : function( data ) { // отдельно – сами товары $( '.products-wrapper' ).html( data.content ); // отдельно – счётчик товаров $( '.woocommerce-result-count' ).text( data.result_text ); } }); } );
Дальше – PHP-код внутри запроса. Я даже ограничусь строчками с использованием wp_send_json()
функции, если вам интересен полный пример – он тут.
// $content – в этой переменную мы записали HTML отфильтрованных // $found_products – в этой переменной число найденных товаров wp_send_json( array( 'content' => $content, 'result_text' => 'Всего товаров: ' . $found_products ) );
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.