Come inviare una richiesta ajax e ottenere una risposta da una funzione?
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)

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