왜 admin-ajax.php를 사용하고 어떻게 작동합니까?


9

json 데이터에 대한 내 아약스 호출은 다음 함수와 같이 작동합니다.

add_action( 'wp_ajax_nopriv_load-filter', 'prefix_load_cat_posts' );
add_action( 'wp_ajax_load-filter', 'prefix_load_cat_posts' );
function prefix_load_cat_posts () {
  //get data here
}

자바 스크립트 :

var ajaxurl = 'http://'+window.location.host+'/wp-admin/admin-ajax.php';
jQuery.ajax({
    type: 'POST',
    url: ajaxurl,
    etc.

질문이 2 개 있습니다.

1) 왜 json을 별도의 파일로 인코딩하고 대신 데이터를 인코딩하는 대신 admin-ajax.php를 사용 themes/example/json.php합니까?

2) admin-ajax.php는 어떻게 작동합니까? 나는 그 파일을 많이 이해하지 못한다. 모든 기능을로드하여 사용할 준비가 되었습니까?

감사!


2
어떤 답변이라도 themes/example/json.php주요 보안 취약점으로 간주되어야 하는 이유에 대해 이야기 할 것입니다.
Tom J Nowell

답변:


14

1) 왜 admin-ajax.phpjson을 별도의 파일로 인코딩하고 대신 데이터를 인코딩 하는 대신 사용 themes/example/json.php합니까?

사용 admin-ajax.php은 워드 프레스 코어가로드되어 사용 가능함을 의미합니다. 그 외에도 필요한 파일을 직접로드해야합니다. 이는 프로세스가 복잡하고 코어를 잘 모르면 실패 할 수 있습니다. 그리고 자바 스크립트 보안에 능숙하십니까?

2) 어떻게 admin-ajax.php작동합니까? 나는 그 파일을 많이 이해하지 못한다. 모든 기능을로드하여 사용할 준비가 되었습니까?

  1. WordPress Core를로드하므로 $wpdb and과 같은 것을 사용할 수 있습니다 $WP_Query. 그것은 약 25 행입니다.
  2. 37-41 행의 몇 가지 헤더를 보냅니다.
    1. 컨텐츠 유형 헤더
    2. 브라우저에게 결과를 캐시하지 말라고 알려주는 헤더
    3. 흥미로운 헤더는 send_nosniff_headers()
    4. 그리고 nocache_headers().
  3. admin_init후크 발생합니다.
  4. 코어 행동은 정의와 선 (46) dynamically-- 등록 - 그들이 통해 요청하지 않는 한,입니다 needed--하지 않는 한이 등록되지 않습니다 73 $_GET$_POST.
  5. "하트 비트"API 후크 발생-라인 75
  6. 요청하는 사용자의 "로그인"상태가 점검되고 적절한 관리 또는 "권한 없음"후크가 발생합니다.

항목 1과 6은 AJAX API를 사용하는 주된 이유입니다. 거의 확실하게 필요한 WordPress Core가 있으며 나머지 WordPress와 동일한 로그인 보안 시스템이 있습니다.


6

admin-ajax.php는 WordPress AJAX API의 일부 이며 예, 백엔드와 프론트의 요청을 처리합니다. 여기 내가 당신의 질문에 대해 알아 낸 것 :

2) admin-ajax.php는 어떻게 작동합니까?

에 대한 논리를 여기 방문 할 수 있습니다.

이것은 JavaScript 등을 큐에 넣는 방법을 이미 알고 있다고 가정합니다.

자바 스크립트 조각 :

jQuery(document).ready(function($) {

    // We'll pass this variable to the PHP function example_ajax_request
    var fruit = 'Banana';

    // This does the ajax request
    $.ajax({
        url: ajaxurl,
        data: {
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            // This outputs the result of the ajax request
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });   

});

PHP 조각 :

function example_ajax_request() {

    // The $_REQUEST contains all the data sent via ajax 
    if ( isset($_REQUEST) ) {

        $fruit = $_REQUEST['fruit'];

        // Let's take the data that was sent and do something with it
        if ( $fruit == 'Banana' ) {
            $fruit = 'Apple';
        }

        // Now we'll return it to the javascript function
        // Anything outputted will be returned in the response
        echo $fruit;

        // If you're debugging, it might be useful to see what was sent in the $_REQUEST
        // print_r($_REQUEST);

    }

    // Always die in functions echoing ajax content
   die();
}

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

// If you wanted to also use the function for non-logged in users (in a theme for example)
 add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

1) 왜 테마 /example/json.php와 같은 별도의 파일로 json을 인코딩하는 대신 admin-ajax.php를 사용하고 거기에서 데이터를 인코딩합니까?

도움이 될 수 있습니다. Ajax 요청에 대한 admin-ajax.php 및 사용자 정의 페이지 템플리트


이 작업 후크 'wp_ajax_example_ajax_request'와 'wp_ajax_nopriv_example_ajax_request'에 대해 설명해 주시겠습니까? 또한 ajaxurl은 무엇을 해결합니까? 감사합니다
David Okwii
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.