Аякс в WordPress

26

Есть ли в любом случае, чтобы определить, является ли текущая операция сервера в настоящее время запросом AJAX в WordPress?

Например:

is_ajax()
  • 0
    если что в настоящее время является запросом ajax? «это» может означать что угодно. и где / почему нужно это проверять?
  • 0
    По формулировке вашего вопроса кажется, что вы не совсем уверены, что такое AJAX. Я предлагаю посмотреть на это: w3schools.com/ajax/default.asp
Показать ещё 3 комментария
Теги:

6 ответов

66
Лучший ответ

Если вы используете AJAX как рекомендуется в кодексе, вы можете проверить константу DOING_AJAX:

if (defined('DOING_AJAX') && DOING_AJAX) { /* it an AJAX call */ }
  • 3
    +1 за особенность WordPress . Я забыл, что он упомянул, что использует WP . Это было бы предпочтительным способом в этой среде.
  • 0
    Это не упоминается в этой ссылке. Я искал себя вчера для этого вопроса - есть ли на самом деле документы по WP, вы знаете?
Показать ещё 2 комментария
10

Чтобы узнать, является ли текущий запрос AJAX запросом, отправленным из библиотеки js (например, jQuery), вы можете попробовать что-то вроде этого:

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}
  • 0
    +1 для более короткой версии, и для меня, изучая кое-что сегодня.
  • 0
    HTTP_X_REQUESTED_WITH не отображается в $ _SERVER в Wordpress.
Показать ещё 1 комментарий
8

WordPress 4.7 предоставил простой способ проверить запросы AJAX, поэтому я подумал, что добавлю к этому старому вопросу.

wp_doing_ajax()

Из Справочник разработчика:

  • Описание: Определяет, является ли текущий запрос запросом WordPress Ajax.

  • Возврат: (bool) Истина, если это запрос Ajax WordPress, в противном случае - false.

Это, по сути, оболочка для DOING_AJAX.

4

Я не уверен, что для WordPress есть функция для этого, но это можно сделать, создав простой.

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
  • 0
    Хотя! Empty, вероятно, не нужен, так как не возвращает ошибку.
  • 0
    На самом деле, isset не нужен. empty проверяет, существует ли переменная уже.
Показать ещё 10 комментариев
3

Я знаю, что это старый поток, но есть проблема с принятым ответом,

Проверка определенной константы 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.
}

(прокомментировал бы... но без репутации)

  • 0
    Спасибо за это - именно это позволило мне не запускать функции, когда Woocommerce делала AJAX-вызовы для изменения корзины людей.
3
if ( ! function_exists('is_ajax') ) {
    function is_ajax() {
        return defined( 'DOING_AJAX' );
    }
}
  • 3
    Было бы полезно сопровождать код некоторыми комментариями.
  • 1
    Код довольно понятен

Ещё вопросы

Сообщество Overcoder
Наверх
Меню