prosource

WordPress에서 AJAX 요청 여부를 감지하는 방법은 무엇입니까?

probook 2023. 2. 16. 21:51
반응형

WordPress에서 AJAX 요청 여부를 감지하는 방법은 무엇입니까?

현재 서버 조작이 WordPress에서 AJAX 요청인지 여부를 검출할 수 있는 방법이 있습니까?

예를 들어 다음과 같습니다.

is_ajax()

업데이트: WordPress 4.7.0 이후 함수 wp_doing_ajax()를 호출할 수 있습니다.이는 "Ajax"를 다르게 수행하는 플러그인이 "false"를 "true"로 변환하도록 필터링할 수 있기 때문에 선호됩니다.


원답:

만약 당신이 코덱스에서 권장하는 대로 Ajax를 사용하고 있다면, 당신은 다음 테스트를 할 수 있습니다.DOING_AJAX상수:

if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }

WordPress 4.7은 AJAX 요청을 쉽게 확인할 수 있는 방법을 도입했기 때문에 이 오래된 질문에 추가하려고 합니다.

wp_doing_ajax()

개발자 레퍼런스:

  • 설명:현재 요청이 WordPress Ajax 요청인지 여부를 결정합니다.

  • 반환: (부울) WordPress Ajax 요청일 경우 True이고, 그렇지 않을 경우 false입니다.

기본적으로 DOING_AJAX용 래퍼입니다.

현재 요구가 js 라이브러리(jQuery 등)에서 전송된 AJAX 요청인지 확인하려면 다음과 같이 시도해 볼 수 있습니다.

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

이게 오래된 줄거리인 건 알지만, 받아들여진 답변에 문제가 있어요.

요청이 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.
}

(댓글을 달았을 텐데...담당자는 없습니다)

WordPress에 기능이 있는지는 모르겠지만, 직접 간단한 기능을 만들어 볼 수 있습니다.

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
if ( ! function_exists('is_ajax') ) {
    function is_ajax() {
        return defined( 'DOING_AJAX' );
    }
}

저는 개인적으로wp_doing_ajax()단, 다음 예에서는 이 기능을 수행할 수법입니다.

if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}

언급URL : https://stackoverflow.com/questions/14348470/how-to-detect-if-it-is-an-ajax-request-in-wordpress

반응형