La llamada Ajax siempre retorna 0
¡Tengo un problema con AJAX que siempre retorna 0!
¡He seguido todos los pasos correctamente y no puedo descubrir qué está mal! ¡Por favor ayuda!
Aquí está mi llamada Ajax:
//Pasar datos a través de AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // nuestro archivo PHP manejador
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
Y la función en functions.php es:
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');
¿Podrías colocar la acción (ajaxConversion) en tus Datos y verificar?
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});

@BenRacicot : ¿Puedes verificar si tienes alguna sentencia que haga output como echo, die(), etc en tu código PHP?

Para mí el truco fue agregar la acción wp_ajax_nopriv
. Probé el script en un navegador cuando estaba logueado en el admin de WP, y luego intenté el mismo script en Chrome y me di cuenta de que no funcionaba. Después de agregar wp_ajax_nopriv
, todo comenzó a funcionar. :)
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();
}

Recomiendo usar wp_send_json_success() y wp_send_json_error() en el lado del servidor. No necesitas preocuparte por die() etc y la variable "status" se envía automáticamente, es mucho más limpio de esta manera. Por ejemplo:
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
Resultará en algo como esto:
{
"success":true,
"data":{"amount":125}
}
Entonces puedes extraer fácilmente los valores en tu llamada 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);
}
}
});
Otro error común que he encontrado son errores tipográficos en el nombre de la acción. Deben ser wp_ajax_nopriv_{action} o wp_ajax_{action} cuando el usuario está conectado. Por ejemplo, wp-ajax_nopriv, es uno que he cometido varias veces en el pasado.

Puede que olvides agregar la siguiente línea:
add_action("wp_ajax_your_ajax_function", "your_ajax_function");
Sin la línea anterior, el ajax no se ejecutará.
Aquí está tu función ajax
function your_ajax_function(){ $result = json_encode($result); echo $result; }

Importante: Asegúrate de enganchar las acciones correctamente en functions.php
Yo me enfrenté a los mismos problemas, probé todos estos métodos, pero algo simple que
olvidé fue requerir mi archivo de acciones en functions.php
// Agregar acciones para usuarios logueados y no logueados
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
// Función para eliminar imágenes subidas
function erase_uploaded_images() {
// Obtener el ID del adjunto a eliminar
$attach_id = filter_input( INPUT_POST, 'attach_id' );
// Eliminar el adjunto de WordPress
wp_delete_attachment( $attach_id );
// Si existe la sesión de imágenes subidas
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
// Buscar y eliminar el ID de la imagen del array de sesión
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
// Actualizar la sesión con el array modificado
$_SESSION['uploaded_images'] = $array_attachments;
}
// Terminar la ejecución de WordPress
wp_die();
}
