WordPress AJAX con Axios: come utilizzarlo per le richieste AJAX
Ho una domanda veloce. Qualcuno è riuscito a utilizzare Axios all'interno di WordPress per fare richieste AJAX (wp_ajax con action - chiamando una funzione) senza usare la REST API e come avete fatto?
Sembra che Axios invii un JSON e ogni volta che provo la richiesta ottengo uno 0. Tuttavia, utilizzando jQuery AJAX funziona bene.

puoi utilizzare FormData
un esempio:
let form_data = new FormData;
form_data.append('action', 'myAction');
form_data.append('first_name', 'my first name');
form_data.append('phone', 'my phone');
axios.post(myVars.ajax_url, form_data).then(function(response){
console.log(response.data);
})

Questo è un metodo solido. Evita di utilizzare un'altra libreria o una funzione che ha una compatibilità limitata con le versioni precedenti.

perché questo non è accettato? Sono arrabbiato. E la domanda è stata votata solo una volta (e quella ero io)??? cosa sta succedendo su stackoverflow????

Questo ha funzionato perfettamente per me!! Ricevevo sempre uno 0 usando axios.post... e con questa soluzione il problema è stato risolto. Sai perché funziona oltre al tuo codice magico?

Devi inviare i tuoi dati nel formato application/x-www-form-urlencoded.
Poiché axios invia json, $_REQUEST['action']
non viene ricevuto da WordPress e restituisce '0'.
Per ottenere questo risultato puoi utilizzare l'API URLSearchParams o Qs.
Ora supponi che il tuo codice jQuery fosse qualcosa come questo
var data = { action: 'get_names', key2:'value2' ...... };
jQuery.post('/wp-admin/admin-ajax.php', data )
.done( function (response) {
console.log(response);
})
.fail( function (error) {
console.log(error);
});
Allora utilizzando URLSearchParams il tuo codice corrispondente con Axios sarà
var params = new URLSearchParams();
params.append('action', 'get_names');
params.append('key2', 'value2');
// params.append('key3', 'value3');
axios.post('/wp-admin/admin-ajax.php', params )
.then( function (response) {
console.log(response.data);
})
.catch( function (error) {
console.log(error);
});
OPPURE se stai usando Qs.js, devi includere Qs prima del tuo script
var data = { action: 'get_names', key2:'value2' ...... };
axios.post('/wp-admin/admin-ajax.php', Qs.stringify( data ))
.then( function (response) {
console.log(data);
})
.catch(function (error) {
console.log(error);
});
Questo è spiegato in modo più dettagliato nel seguente link.
