ทำไมต้องใช้ admin-ajax.php และมันทำงานอย่างไร


9

ajax ของฉันเรียกใช้ข้อมูล json ได้ดีเหมือนฟังก์ชั่นนี้ 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.

ฉันมี 2 คำถาม

1) ทำไมต้องใช้ admin-ajax.php แทนที่จะเข้ารหัส json ของคุณในไฟล์แยกเช่นthemes/example/json.phpและเข้ารหัสข้อมูลของคุณที่นั่น?

2) admin-ajax.php ทำงานอย่างไร ฉันไม่เข้าใจมากจากไฟล์นั้น มันโหลดฟังก์ชั่นทั้งหมดเพื่อให้คุณพร้อมใช้งานหรือไม่

ขอบคุณ!


2
จากคำตอบคำตอบใด ๆ จะพูดถึงสาเหตุที่themes/example/json.phpควรพิจารณาว่าเป็นช่องโหว่ด้านความปลอดภัยที่สำคัญ
Tom J Nowell

คำตอบ:


14

1) ทำไมต้องใช้admin-ajax.phpแทนที่จะเข้ารหัส json ของคุณในไฟล์แยกต่างหากเช่นthemes/example/json.phpและเข้ารหัสข้อมูลของคุณที่นั่น?

การใช้admin-ajax.phpหมายความว่าโหลด WordPress Core และพร้อมใช้งานแล้ว โดยที่คุณจะต้องโหลดไฟล์ที่คุณต้องการซึ่งเป็นกระบวนการที่ซับซ้อนและมีแนวโน้มที่จะเกิดความล้มเหลวหากคุณไม่รู้จัก Core มากดี และคุณมีความปลอดภัยของ Javascript ดีแค่ไหน?

2) admin-ajax.phpทำงานอย่างไร ฉันไม่เข้าใจมากจากไฟล์นั้น มันโหลดฟังก์ชั่นทั้งหมดเพื่อให้คุณพร้อมใช้งานหรือไม่

  1. มันโหลด WordPress หลักซึ่งหมายความว่าคุณสามารถใช้สิ่งที่ต้องการและ$wpdb $WP_Queryนั่นคือประมาณ 25 บรรทัด
  2. ส่งส่วนหัวเล็กน้อย - บรรทัดที่ 37 - 41
    1. ส่วนหัวประเภทเนื้อหา
    2. ส่วนหัวสำหรับบอกเบราว์เซอร์ที่จะไม่แคชผลลัพธ์
    3. ส่วนหัวที่น่าสนใจคือสิ่งที่ส่งมาจาก send_nosniff_headers()
    4. nocache_headers()และ
  3. admin_initไฟเบ็ด
  4. การกระทำของแกนจะมีการกำหนดและจดทะเบียนเส้น dynamically-- 46 - 73. เหล่านี้จะไม่ได้รับการจดทะเบียนจนกว่าพวกเขาจะ needed-- นั่นคือถ้าพวกเขาได้รับการร้องขอผ่านหรือ$_GET$_POST
  5. API hook "heartbeat" ใช้งานได้ - บรรทัดที่ 75
  6. สถานะ "เข้าสู่ระบบ" ของผู้ใช้ที่ร้องขอมีการตรวจสอบและการบริหารที่เหมาะสมหรือเบ็ด "no Priviledge" ถูกยิง

รายการ # 1 และ # 6 เป็นเหตุผลหลักในการใช้ AJAX API ในความคิดของฉัน คุณมี WordPress Core ซึ่งคุณต้องการเกือบแน่นอนและคุณมีระบบรักษาความปลอดภัยการเข้าสู่ระบบเช่นเดียวกับส่วนที่เหลือของ WordPress


6

admin-ajax.phpเป็นส่วนหนึ่งของ WordPress AJAX APIและใช่มันจัดการคำขอจากแบ็กเอนด์และด้านหน้า นี่คือสิ่งที่ฉันคิดออกสำหรับคำถามของคุณ:

2) admin-ajax.php ทำงานอย่างไร

สำหรับตรรกะที่คุณสามารถเยี่ยมชมได้ที่นี่

สิ่งนี้จะถือว่าคุณรู้วิธีการจัดคิว JavaScript และอื่น ๆ แล้ว

ชิ้นส่วน 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 Piece:

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) ทำไมต้องใช้ admin-ajax.php แทนที่จะเข้ารหัส json ของคุณในไฟล์แยกต่างหากเช่น themes / example / json.php และเข้ารหัสข้อมูลของคุณที่นั่น?

อาจเป็นประโยชน์ admin-ajax.php เทียบกับแม่แบบหน้ากำหนดเองสำหรับคำขอ Ajax


สวัสดีคุณสามารถอธิบายตะขอการกระทำเหล่านี้ได้หรือไม่ ajaxurl แก้ไขปัญหาอะไรได้บ้าง? ขอบคุณ
David Okwii
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.