wp_send_json_error() WP 3.5.0

Повертає дані JSON. Використовується для повернення помилок в запитах AJAX. Відповідь завжди міститиме елемент success=false . Обриває роботу PHP скрипта (die).

Функція також встановлює header заголовок та обриває роботу PHP скрипта через die() :

@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );

Просто виклик wp_send_json_error() не встановить відповіді помилки – замість неї повернеться 200 . Тому, якщо потрібно вказати, що AJAX запит провалився, обов’язково вкажіть код помилки, наприклад 500, у параметрі $status_code.

З версії 4.1. Якщо параметр $data передати об’єкт WP_Error , він буде оброблений і функція поверне масив з повідомленням про помилку. Тобто. функція розуміє переданий WP_Error об’єкт.

wp_send_json_success() – протилежна цій функції. Повертає успішну відповідь.

Працює на основі:
wp_send_json()

Хуків немає.

Повертає

null. Виводить на екран дані та обриває роботу php.

// Вид даних, що повертаються, перед кодуванням в JSON:
array( 'success' => false );
array( 'success' => false, 'data' => $data ); // якщо вказано $data

Використання

wp_send_json_error( $data, $status_code, $options );
$data
(рядок/масив/число/об’єкт/логічний)
Дані, які будуть додані в результат до елементу масиву data, перед кодуванням у JSON.


Типово: null
$status_code
(число)
HTTP статус код, який потрібно встановити. Які бувають статус коди,
дивіться тут . C WP 4.7.


Типово: null
$options
(число) (WP 5.6)

Опції, які будуть передані в функцію json_encode() . Бітова маска, що складається із значень:

JSON_FORCE_OBJECT
JSON_HEX_QUOT
JSON_HEX_TAG
JSON_HEX_AMP
JSON_HEX_APOS
JSON_INVALID_UTF8_IGNORE
JSON_INVALID_UTF8_SUBSTITUTE
JSON_NUMERIC_CHECK
JSON_PARTIAL_OUTPUT_ON_ERROR
JSON_PRESERVE_ZERO_FRACTION
JSON_PRETTY_PRINT
JSON_UNESCAPED_LINE_TERMINATORS
JSON_UNESCAPED_SLASHES
JSON_UNESCAPED_UNICODE
JSON_THROW_ON_ERROR

Сенс цих констант пояснюється на сторінці JSON констант .
За замовчуванням: 0

Приклади

0

#1 Повернення помилки в JSON форматі при AJAX відповіді

Цей jQuery код відправляє AJAX запит на сторінку плагіна ajax/save_field.php:

fetch( `${ pluginUrl }/ajax/save_field.php` )
	.then( resp => resp.json() )
	.then(res => {
		if(res.success) {
			alert(res.data)
		}
		// error
		else {
			alert(res.data)
		}
	} )

Це код файлу save_field.php, який обробляє надісланий запит. Тут показано, як повертати помилки:

<?php

$nonce = $_POST['_wpnonce_name'];

// print json given success=false
if ( empty( $_POST ) || ! wp_verify_nonce( $nonce, 'my-nonce' ) ) {
	wp_send_json_error( 'Error messege');
}

// it is not necessary to use die here

wp_send_json_success( 'OK message');
0

#2 Передача WP_Error в $data

У $data можна передати об’єкт WP_Error .

$error = new WP_Error( 'error_code', 'ERROR: Wrong credentials.' );

wp_send_json_error( $error );

Тепер при отриманні даних у JS відповідь (response) буде містити масив всіх помилок у такому вигляді (зазвичай там лише один елемент):

{
	success: false,
	data: [
		0: { code: 'error_code', message: 'ERROR: Wrong credentials.' }
	]
}

Тобто. Сповіщення про помилку можна отримати так:

response.data[0].message

список змін

З версії 3.5.0Введено.
З версії 4.1.0У $data parameter is now processed if a WP_Error object is passed in .
З версії 4.7.0$status_code parameter був added.
З версії 5.6.0The $options parameter був added.

Код wp_send_json_error() WP 6.0.2

function wp_send_json_error( $data = null, $status_code = null, $options = 0 ) {
	$response = array( 'success' => false );

	if ( isset ( $ data ) ) {
		if ( is_wp_error ( $ data ) ) {
			$result = array();
			foreach ( $data->errors as $code => $messages ) {
				foreach ($ messages as $message) {
					$result[] = array(
						'code' => $code,
						'message' => $message,
					);
				}
			}

			$response['data'] = $result;
		} else {
			$response['data'] = $data;
		}
	}

	wp_send_json($response, $status_code, $options);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *