La chiamata Ajax ritorna sempre 0
Ho un problema con AJAX che ritorna sempre 0!
Ho fatto tutto secondo le regole e non riesco a capire dove sia l'errore. Per favore aiuto!!
Ecco la mia chiamata Ajax:
//Passa i dati attraverso AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // il nostro file PHP handler
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
E la funzione in functions.php è:
function ajaxConversion(){
$amount = mysql_real_escape_string($_POST['amount']);
echo $amount;
die();
};
add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion');
add_action('wp_ajax_ajaxConversion', 'ajaxConversion');
Puoi inserire l'azione (ajaxConversion) nei tuoi Dati e verificare?
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});

@BenRacicot : Puoi verificare se hai dichiarazioni che producono output come echo, die(), ecc. nel tuo codice PHP?

Per me il trucco è stato aggiungere l'azione wp_ajax_nopriv
. Ho testato lo script su un browser mentre ero loggato nell'admin di WP, e poi ho provato lo stesso script in Chrome e mi sono reso conto che non funzionava. Dopo aver inserito wp_ajax_nopriv
, tutto ha iniziato a funzionare. :)
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
function erase_uploaded_images() {
$attach_id = filter_input( INPUT_POST, 'attach_id' );
wp_delete_attachment( $attach_id );
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
$_SESSION['uploaded_images'] = $array_attachments;
}
wp_die();
}

Questo, amico mio, mi ha salvato 2 ore di frustrazione. Un'altra lezione da imparare quando si distribuisce l'applicazione in un altro ambiente T_T

Raccomando di utilizzare wp_send_json_success() e wp_send_json_error() lato server. Non c'è bisogno di preoccuparsi di die() ecc. e la variabile "status" viene inviata automaticamente, è molto più pulito in questo modo. Ad esempio:
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
Risulterà in qualcosa del genere:
{
"success":true,
"data":{"amount":125}
}
Quindi puoi facilmente estrarre i valori nella tua chiamata ajax:
jQuery.ajax({
type : 'post',
data : {
action: 'ajaxConversion',
//nonce : ajax.nonce
},
dataType : 'json',
url : ajax.ajaxurl,
success : function(data){
if(data.success) {
alert(data.amount);
} else {
alert(data.data.message);
}
}
});
Un altro errore comune in cui mi sono imbattuto sono i refusi nel nome dell'azione. Dovrebbero essere wp_ajax_nopriv_{azione} o wp_ajax_{azione} quando si è loggati. Ad esempio, wp-ajax_nopriv è un errore che ho fatto diverse volte in passato.

Potresti dimenticare di aggiungere la seguente riga:
add_action("wp_ajax_your_ajax_function", "your_ajax_function");
Senza la riga sopra, l'ajax non verrà attivato.
Ecco la tua funzione ajax
function your_ajax_function(){ $result = json_encode($result); echo $result; }

Cosa importante da fare, aggiungi correttamente l'hook action nel functions.php
Ho affrontato gli stessi problemi, ho provato tutti questi metodi, ma mi mancava una cosa semplice:
dovevo includere il mio file di azione nel functions.php
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
function erase_uploaded_images() {
$attach_id = filter_input( INPUT_POST, 'attach_id' );
wp_delete_attachment( $attach_id );
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
$_SESSION['uploaded_images'] = $array_attachments;
}
wp_die();
}
