วิธีที่ดีที่สุดในการเขียนปลั๊กอินที่เปิดใช้งาน AJAX คืออะไร


49

ฉันสงสัยว่าวิธีที่ต้องการสำหรับจัดการกับการโทร AJAX คืออะไร เราควรใช้ไฟล์ปลั๊กอิน php เดียวกันเพื่อประมวลผล POST หรือไฟล์อื่น? อันไหนสะอาดกว่าหรือปลอดภัยกว่า?

คำตอบ:


47

วิธี "ปลอดภัยและสะอาด" จะใช้ admin-ajax.php ที่มาพร้อมกับ wordpress และwp_ajaxhook เพื่อเรียกใช้ฟังก์ชันการประมวลผลของคุณจากไฟล์ปลั๊กอินของคุณและใช้ wp-nonce เพื่อตรวจสอบความสมบูรณ์ของการโทร

ตัวอย่างเช่น:

ajax JQuery ของคุณจะเป็นเช่นนั้น

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

จากนั้นในไฟล์ปลั๊กอินของคุณเพิ่ม

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

* ถ้าคุณต้องการให้ผู้ใช้และแขกที่เข้าสู่ระบบเข้าถึงฟังก์ชันของคุณโดย ajax จากนั้นเพิ่ม hooks ทั้งสอง * ACTION_NAMEจะต้องตรงกับค่าการกระทำใน ajax POST ของคุณ

จากนั้นในฟังก์ชันของคุณเพียงตรวจสอบให้แน่ใจว่าคำขอมาจากแหล่งที่ถูกต้อง

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

หวังว่าสิ่งนี้จะช่วย


1
การใช้งานนี้ดีสำหรับด้านผู้ดูแลระบบหรือไม่ แล้วด้านผู้ใช้ล่ะ? ฉันต้องการที่จะซ่อน / WP-admin / และเปลี่ยน URL ผู้ดูแลระบบเพื่อการร้องขอไปยัง URL ที่ซ่อนอยู่จะไม่ดี
inferusvv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.