Есть ли в любом случае, чтобы определить, является ли текущая операция сервера в настоящее время запросом AJAX в WordPress?
Например:
is_ajax()
Если вы используете AJAX как рекомендуется в кодексе, вы можете проверить константу DOING_AJAX
:
if (defined('DOING_AJAX') && DOING_AJAX) { /* it an AJAX call */ }
Чтобы узнать, является ли текущий запрос AJAX запросом, отправленным из библиотеки js (например, jQuery), вы можете попробовать что-то вроде этого:
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
WordPress 4.7 предоставил простой способ проверить запросы AJAX, поэтому я подумал, что добавлю к этому старому вопросу.
wp_doing_ajax()
Описание: Определяет, является ли текущий запрос запросом WordPress Ajax.
Возврат: (bool) Истина, если это запрос Ajax WordPress, в противном случае - false.
Это, по сути, оболочка для DOING_AJAX.
Я не уверен, что для WordPress есть функция для этого, но это можно сделать, создав простой.
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
// Is AJAX request
return true;
}
isset
не нужен. empty
проверяет, существует ли переменная уже.
Я знаю, что это старый поток, но есть проблема с принятым ответом,
Проверка определенной константы DOING_AJAX всегда будет истиной, если запрос принадлежит файлу admin-ajax.php. (https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16)
Иногда аддоны admin-ajax.php не используются для запроса AJAX, просто простая конечная точка (например, IPN Paypal).
Правильный способ - это то, о чем упомянули Иан и Спенсер.
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
(прокомментировал бы... но без репутации)
if ( ! function_exists('is_ajax') ) {
function is_ajax() {
return defined( 'DOING_AJAX' );
}
}