45

現在のサーバー操作が現在WordPressのAJAXリクエストであるかどうかを検出する方法はありますか?

例えば:

is_ajax()
4

7 に答える 7

96

更新:WordPress 4.7.0以降、関数wp_doing_ajax()を呼び出すことができます。これは、「Ajaxを実行する」プラグインが「false」を「true」に変換するためにフィルタリングできるため、望ましい方法です。


元の答え:

コーデックスで推奨されているようにAjaxを使用している場合は、DOING_AJAX定数をテストできます。

if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }
于 2013-01-16T01:07:36.073 に答える
33

WordPress 4.7ではAJAXリクエストをチェックする簡単な方法が導入されているので、この古い質問に追加したいと思いました。

wp_doing_ajax()

開発者リファレンスから:

  • 説明:現在のリクエストがWordPressAjaxリクエストであるかどうかを判別します。

  • 戻り値:(ブール値)WordPress Ajaxリクエストの場合はtrue、それ以外の場合はfalse。

これは基本的にDOING_AJAXのラッパーです。

于 2017-02-27T17:13:20.237 に答える
16

現在のリクエストがjsライブラリ(jQueryなど)から送信されたAJAXリクエストであるかどうかを確認するには、次のような方法を試すことができます。

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}
于 2013-01-15T23:04:30.213 に答える
6

WordPressにこの機能があるかどうかはわかりませんが、簡単なものを自分で作成することで実行できます。

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
于 2013-01-15T23:02:22.103 に答える
5

これは古いスレッドですが、受け入れられた回答に問題があります。

admin-ajax.phpファイルに対するリクエストの場合、定義されたDOING_AJAX定数のチェックは常にtrueになります。(https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16

admin-ajax.phpフックがAJAXリクエストに使用されず、単純なエンドポイント(Paypal IPNなど)が使用される場合があります。

正しい方法は、イアンとスペンサーが述べたことです。

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}

(コメントしただろう...しかし、担当者はいない)

于 2016-02-14T13:53:14.733 に答える
4
if ( ! function_exists('is_ajax') ) {
    function is_ajax() {
        return defined( 'DOING_AJAX' );
    }
}
于 2014-10-25T08:14:23.887 に答える
0

私は個人的には好きwp_doing_ajax()ですが、これはそれを行うべき別の例です。

if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}
于 2019-04-09T15:58:36.500 に答える