Tại sao nên sử dụng admin-ajax.php và nó hoạt động như thế nào?


9

Cuộc gọi ajax của tôi cho dữ liệu json hoạt động tốt như hàm này.php:

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
}

javascript:

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

Tôi có 2 câu hỏi.

1) Tại sao nên sử dụng admin-ajax.php thay vì mã hóa json của bạn trong một tệp riêng như themes/example/json.phpvà mã hóa dữ liệu của bạn ở đó?

2) Admin-ajax.php hoạt động như thế nào? Tôi không hiểu nhiều từ tập tin đó. Nó có tải tất cả các chức năng để bạn sẵn sàng sử dụng chúng không?

Cảm ơn!


2
Đáng chú ý, bất kỳ câu trả lời nào cũng sẽ nói về lý do tại sao themes/example/json.phpnên được coi là lỗ hổng bảo mật lớn
Tom J Nowell

Câu trả lời:


14

1) Tại sao sử dụng admin-ajax.phpthay vì mã hóa json của bạn trong một tệp riêng như themes/example/json.phpvà mã hóa dữ liệu của bạn ở đó?

Sử dụng admin-ajax.phpcó nghĩa là WordPress Core đã được tải và có sẵn. Tuy nhiên, bạn sẽ cần phải tải bằng tay các tệp bạn cần, đây là một quá trình phức tạp và dễ bị lỗi nếu bạn không biết rất rõ về Core. Và, bạn có bảo mật Javascript tốt như thế nào?

2) Làm admin-ajax.phpviệc như thế nào? Tôi không hiểu nhiều từ tập tin đó. Nó có tải tất cả các chức năng để bạn sẵn sàng sử dụng chúng không?

  1. Nó tải WordPress Core, nghĩa là bạn có thể sử dụng những thứ như $wpdb$WP_Query. Đó là thông qua khoảng 25 dòng.
  2. Nó sẽ gửi một vài tiêu đề-- dòng 37 - 41.
    1. Tiêu đề loại nội dung
    2. Một tiêu đề để báo cho các trình duyệt không lưu trữ kết quả
    3. Các tiêu đề thú vị là những tiêu đề được gửi bởi send_nosniff_headers()
    4. nocache_headers().
  3. Cái admin_initmóc lửa.
  4. Các hành động cốt lõi được xác định và đăng ký động - các dòng 46 - 73. Những hành động này sẽ không được đăng ký trừ khi chúng cần thiết - nghĩa là, trừ khi chúng được yêu cầu thông qua $_GEThoặc $_POST.
  5. API hook "heartbeat" kích hoạt-- dòng 75
  6. Trạng thái "đã đăng nhập" của người dùng yêu cầu được kiểm tra và móc quản trị hoặc "không có quyền riêng tư" thích hợp được kích hoạt.

Theo tôi, các mục số 1 và số 6 là lý do chính để sử dụng API AJAX. Bạn có WordPress Core, thứ mà bạn gần như chắc chắn cần, và bạn có cùng hệ thống bảo mật đăng nhập như với phần còn lại của WordPress.


6

admin-ajax.phplà một phần của API AJAX của WordPress và vâng, nó xử lý các yêu cầu từ cả phụ trợ và phía trước. đây là những gì tôi tìm ra cho câu hỏi của bạn đó là:

2) Admin-ajax.php hoạt động như thế nào?

cho logic bạn có thể truy cập ở đây.

Điều này giả định rằng bạn đã biết cách thu hút JavaScript, v.v.

Mảnh 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);
        }
    });   

});

Mảnh 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) Tại sao nên sử dụng admin-ajax.php thay vì mã hóa json của bạn trong một tệp riêng như chủ đề / example / json.php và mã hóa dữ liệu của bạn ở đó?

có thể hữu ích admin-ajax.php vs Mẫu trang tùy chỉnh cho các yêu cầu Ajax


Xin chào, bạn có thể giải thích các móc hành động này 'wp_ajax_example_ajax_Vquest' và 'wp_ajax_nopriv_example_ajax_Vquest' Tôi không tìm thấy lời giải thích nào ở bất cứ đâu. Ngoài ra ajaxurl giải quyết vấn đề gì? Cảm ơn
David Okwii
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.