Cum trimit o cerere ajax și primesc un răspuns de la o funcție?

1 iun. 2016, 03:34:58
Vizualizări: 23.5K
Voturi: 3

Am construit o funcție într-un plugin. Aș dori să o apelez cu o funcție jQuery ajax.

Funcția este definită astfel:

add_action( 'wp_ajax_my_test_ajax', 'my_test_ajax' );
add_action( 'wp_ajax_nopriv_my_test_ajax', 'my_test_ajax' );

function  my_test_ajax() {    

    $resp = array('title' => 'aici este titlul', 'content' => 'aici este conținutul') ;        
    wp_send_json($resp) ;

}

Apoi încerc să apelez funcția din JavaScript:

var target = 'http://'  +  window.location.hostname  + '/wp-admin/admin-ajax.php' ;
var data = {
    action: ' my_test_ajax'
} ;
var req = jQuery.post( target , data,  function(resp) { 
    console.log(resp.responseText);
}) ;    
}

Site-ul răspunde de la admin-ajax.php. Răspunsul poartă un header '200 OK'. Corpul răspunsului este '0'.

Codexul îmi spune că pot aștepta acest răspuns dacă valoarea lui 'action' din corpul cererii post nu se potrivește cu numele unei funcții conectate la hook-urile ajax WordPress. Dar din câte îmi dau seama, sunt în regulă aici.

Sunt sigur că funcția este inclusă în fișierul plugin-ului meu.

Care sunt celelalte elemente esențiale minime de care am nevoie pentru a face acest lucru să funcționeze?

(Nu vreau să mă îngrijorez de nonce-uri sau localizarea js în acest moment. Vreau doar să primesc un răspuns de la funcție înainte de a construi mai departe)

0
Toate răspunsurile la întrebare 2
0

$.ajax este foarte simplu și poți adăuga mai mulți parametri ușor în linia data: {action:'my_test_ajax'}, încearcă asta:

var target = 'http://'  +  window.location.hostname  + '/wp-admin/admin-ajax.php';
$.ajax({
    url: ajax,
    data: {action:'my_test_ajax'},
    type: 'post',
    success: function(data){
        console.log(data, data.title, data.content)
    }
});

Asigură-te că target indică exact către admin-ajax.php sau setează o variabilă globală (sau folosind localize script) pentru a adăuga o variabilă unde stochezi calea către admin-ajax.php care este admin_url('admin-ajax.php') în caz de confuzie.

$.ajax parsează datele JSON în mod implicit, dacă lucrezi cu alte metode care returnează răspunsul ca atare (șir de caractere) atunci pur și simplu folosește metoda JSON.parse(response). Asta pentru că folosești wp_send_json($resp) care returnează un răspuns obiect JSON în endpoint.

Iată un exemplu de adăugare a mai multor date la cerere:

Folosind metoda append la variabila data sau păstrând-o scurtă și simplă ca data: {action:'my_test_ajax', name: 'dave', network: 'wpse'} iar din funcția my_test_ajax poți obține aceste date prin $_REQUEST[tag] de exemplu $_REQUEST['name']

Metoda $.get ( $_GET ):

Aceasta este și mai simplă și necesită mai puțin cod:

$.get( target = '/wp-admin/admin-ajax.php?action=my_test_ajax', function( data ) {
    console.log( data )
});

Ține minte să folosești $_REQUEST în scriptul tău PHP deoarece combină toate seturile de date $_GET, $_POST și $_COOKIE. Bineînțeles, doar dacă nu ești sigur de metoda cu care lucrezi.

Sper că te ajută.

1 iun. 2016 04:27:57
0

1) ai un spațiu suplimentar în cod și de aceea nu funcționează:

action: ' my_test_ajax'
         ^

2) de asemenea, trebuie să incluzi check_admin_referrer() !!!!!!!!!

function  my_test_ajax() {  
   check_admin_referrer();
    .........
    .........
}
4 oct. 2016 23:07:20