De ce să folosești admin-ajax.php și cum funcționează?

10 iun. 2015, 02:53:54
Vizualizări: 40.4K
Voturi: 15

Apelul meu ajax pentru date json funcționează ok astfel functions.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 () {
  //obține datele aici
}

javascript:

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

Am 2 întrebări.

1) De ce să folosești admin-ajax.php în loc să codifici json-ul într-un fișier separat precum themes/example/json.php și să codifici datele acolo?

2) Cum funcționează admin-ajax.php? Nu înțeleg prea multe din acel fișier. Încarcă toate funcțiile astfel încât să fii pregătit să le folosești?

Mulțumesc!

1
Comentarii

De remarcat, orice răspuns ar trebui să abordeze de ce themes/example/json.php ar trebui considerată o vulnerabilitate majoră de securitate

Tom J Nowell Tom J Nowell
10 iun. 2015 04:45:12
Toate răspunsurile la întrebare 2
0
17

1) De ce să folosești admin-ajax.php în loc să codezi json-ul într-un fișier separat precum themes/example/json.php și să codezi datele acolo?

Folosirea admin-ajax.php înseamnă că WordPress Core este încărcat și disponibil. Fără aceasta, ar trebui să încarci manual fișierele de care ai nevoie, ceea ce este un proces complicat și predispus la erori dacă nu cunoști foarte, foarte bine Nucleul WordPress. Și, cât de bun ești la securitatea în Javascript?

2) Cum funcționează admin-ajax.php? Nu înțeleg prea multe din acel fișier. Încarcă toate funcțiile astfel încât să fii pregătit să le folosești?

  1. Încarcă WordPress Core, ceea ce înseamnă că poți folosi lucruri precum $wpdb și $WP_Query. Asta se întâmplă până la linia 25 aproximativ.
  2. Trimite câteva anteturi - liniile 37 - 41.
    1. Un antet pentru tipul de conținut
    2. Un antet care spune browserelor să nu cacheze rezultatele
    3. Anteturile interesante sunt cele trimise de send_nosniff_headers()
    4. și nocache_headers().
  3. Hook-ul admin_init este declanșat.
  4. Acțiunile de bază sunt definite și înregistrate dinamic - liniile 46 - 73. Acestea nu vor fi înregistrate decât dacă sunt necesare - adică dacă sunt solicitate prin $_GET sau $_POST.
  5. Hook-ul API-ului "heartbeat" este declanșat - linia 75
  6. Este verificat statutul de "autentificat" al utilizatorului care face cererea și este declanșat hook-ul administrativ corespunzător sau cel "fără privilegii".

Punctele #1 și #6 sunt motivele principale pentru a folosi API-ul AJAX, în opinia mea. Ai la dispoziție WordPress Core, de care ai nevoie aproape sigur, și ai același sistem de securitate la autentificare ca în restul WordPress.

10 iun. 2015 17:04:27
1

admin-ajax.php face parte din API-ul AJAX al WordPress și da, se ocupă de cereri atât din backend cât și din frontend. iată ce am descoperit pentru întrebarea ta care este:

2) Cum funcționează admin-ajax.php?

pentru logică poți vizita aici.

Aceasta presupune că știi deja cum să încarci JavaScript, etc.

Partea de JavaScript:

jQuery(document).ready(function($) {

    // Vom trimite această variabilă către funcția PHP example_ajax_request
    var fruit = 'Banana';

    // Aceasta face cererea ajax
    $.ajax({
        url: ajaxurl,
        data: {
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            // Aceasta afișează rezultatul cererii ajax
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });   

});

Partea de PHP:

function example_ajax_request() {

    // $_REQUEST conține toate datele trimise via ajax 
    if ( isset($_REQUEST) ) {

        $fruit = $_REQUEST['fruit'];

        // Să luăm datele care au fost trimise și să facem ceva cu ele
        if ( $fruit == 'Banana' ) {
            $fruit = 'Apple';
        }

        // Acum le vom returna funcției javascript
        // Orice este afișat va fi returnat în răspuns
        echo $fruit;

        // Dacă faci debugging, poate fi util să vezi ce a fost trimis în $_REQUEST
        // print_r($_REQUEST);

    }

    // Întotdeauna folosește die() în funcțiile care returnează conținut ajax
   die();
}

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

// Dacă dorești să folosești funcția și pentru utilizatorii nelogati (de exemplu într-o temă)
 add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

1) De ce să folosești admin-ajax.php în loc să codezi json-ul într-un fișier separat precum themes/example/json.php și să codezi datele acolo?

poate fi util acest lucru.admin-ajax.php vs Șablon de Pagină Personalizat pentru Cereri Ajax

10 iun. 2015 10:54:47
Comentarii

Hei, poți să explici aceste action hooks 'wp_ajax_example_ajax_request' și 'wp_ajax_nopriv_example_ajax_request'? Nu găsesc nicio explicație nicăieri. De asemenea, în ce se rezolvă ajaxurl? Mulțumesc!

David Okwii David Okwii
13 apr. 2020 13:55:19