Phương pháp ưa thích để viết các plugin hỗ trợ AJAX là gì?


49

Tôi đang tự hỏi phương pháp ưa thích là gì để xử lý các cuộc gọi AJAX. Nên sử dụng cùng một tệp php plugin để xử lý POST hoặc một tệp riêng biệt? Cái nào sạch hơn hay an toàn hơn?

Câu trả lời:


47

cách "an toàn và sạch sẽ hơn" là sử dụng admin-ajax.php đi kèm với wordpress và wp_ajaxhook để gọi chức năng xử lý của bạn từ tệp plugin của bạn và sử dụng wp-nonce để kiểm tra tính toàn vẹn của cuộc gọi.

ví dụ:

cuộc gọi JQuery ajax của bạn sẽ là

<script type="text/javascript" >
jQuery(document).ready(function($) {

    var data = {
        action: 'ACTION_NAME',
            Whatever: '1234',
            _ajax_nonce: '<?php echo wp_create_nonce( 'my_ajax_nonce' ); ?>'

    };

    // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
    // If you need it on a public facing page, uncomment the following line:
    // var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});
</script>

sau đó trong tập tin plugin của bạn thêm

//if you want only logged in users to access this function use this hook
add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');

//if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function');

* nếu bạn muốn người dùng và khách đăng nhập truy cập chức năng của mình bằng ajax, sau đó thêm cả hai hook. * ACTION_NAME phải khớp với giá trị hành động trong POST ajax của bạn.

sau đó trong chức năng của bạn chỉ cần đảm bảo yêu cầu đến từ nguồn hợp lệ

function my_AJAX_processing_function(){
   check_ajax_referer('my_ajax_nonce');
   //do stuff here...
}

Hi vọng điêu nay co ich


1
Việc thực hiện này chỉ tốt cho phía quản trị viên? Còn phía người dùng thì sao? Tôi muốn ẩn / wp-admin / và thay đổi URL quản trị viên, vì vậy yêu cầu URL ẩn sẽ không tốt
inferusvv
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.