Apa metode yang disukai untuk menulis plugin yang mendukung AJAX?

49

Saya bertanya-tanya apa metode yang disukai untuk menangani panggilan AJAX. Haruskah seseorang menggunakan file php plugin yang sama untuk memproses POST atau yang terpisah? Mana yang lebih bersih atau lebih aman?

James
sumber

Jawaban:

47

cara "lebih aman dan bersih" adalah dengan menggunakan admin-ajax.php yang datang dengan wordpress dan wp_ajaxhook untuk memanggil fungsi pemrosesan Anda dari file plugin Anda dan menggunakan wp-nonce untuk memeriksa integritas panggilan.

sebagai contoh:

panggilan JQuery ajax Anda akan menjadi

<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>

kemudian di file plugin Anda tambahkan

//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');

* jika Anda ingin masuk pengguna dan tamu untuk mengakses fungsi Anda dengan ajax kemudian tambahkan kedua kait. * ACTION_NAME harus cocok dengan nilai tindakan di ajax POST Anda.

maka dalam fungsi Anda pastikan permintaan tersebut berasal dari sumber yang valid

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

Semoga ini membantu

Bainternet
sumber
1
Implementasi ini hanya baik untuk sisi admin? Bagaimana dengan sisi pengguna? Saya ingin menyembunyikan / wp-admin / dan mengubah URL admin, jadi permintaan untuk menyembunyikan URL tidak akan bagus
inferusvv