Come inviare una richiesta ajax e ottenere una risposta da una funzione?

1 giu 2016, 03:34:58
Visualizzazioni: 23.5K
Voti: 3

Ho creato una funzione all'interno di un plugin. Vorrei chiamarla con una funzione jQuery ajax.

La funzione è definita come segue:

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' => 'ecco il titolo', 'content' => 'ecco il contenuto') ;        
    wp_send_json($resp) ;
}

Poi provo a chiamare la funzione da 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);
});
}

Il sito risponde da admin-ajax.php. La risposta contiene un header '200 OK'. Il corpo della risposta è '0'.

Il codex mi dice che posso aspettarmi questa risposta se il valore di 'action' nel corpo della post non corrisponde al nome di una funzione agganciata agli hook ajax di WordPress. Ma per quanto ne so, dovrebbe essere tutto a posto.

Sono sicuro che la funzione sia inclusa nel file del mio plugin.

Quali sono gli altri requisiti minimi essenziali per far funzionare questo codice?

(Non voglio preoccuparmi di nonce o localizzazione js in questo momento. Voglio solo ottenere una risposta dalla funzione prima di costruire ulteriormente)

0
Tutte le risposte alla domanda 2
0

$.ajax è molto semplice e puoi aggiungere più parametri facilmente nella riga data: {action:'my_test_ajax'}, prova questo:

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)
    }
});

Assicurati che target punti esattamente a admin-ajax.php o imposta una variabile globale (o utilizzando localize script) per aggiungere una variabile in cui memorizzi il percorso di admin-ajax.php che è admin_url('admin-ajax.php') in caso di confusione.

$.ajax analizza i dati JSON per impostazione predefinita, se lavori con altri metodi che restituiscono la risposta così com'è (stringa) usa semplicemente il metodo JSON.parse(response). JSON perché usi wp_send_json($resp) che restituisce una risposta oggetto JSON nell'endpoint.

Ecco un esempio di aggiunta di più dati alla richiesta:

Usando il metodo append alla variabile data o mantenendolo breve e semplice come data: {action:'my_test_ajax', name: 'dave', network: 'wpse'} e dalla funzione my_test_ajax puoi ottenere questi dati con $_REQUEST[tag] ad esempio $_REQUEST['name']

Metodo $.get ( $_GET ):

Questo è ancora più semplice e richiede meno codice:

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

Ricorda di usare $_REQUEST nel tuo script PHP perché unisce tutti i set di dati $_GET, $_POST e $_COOKIE. A meno che, ovviamente, non sei sicuro del metodo con cui stai lavorando.

Spero sia utile.

1 giu 2016 04:27:57
0

1) Hai uno spazio bianco extra nel codice, ed è per questo che non funziona:

action: ' my_test_ajax'
         ^

2) Inoltre, devi includere check_admin_referrer() !!!!!!!!!

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