Ajax запрос всегда возвращает 0
У меня проблема с AJAX, который всегда возвращает 0!
Я сделал всё по инструкции и не могу понять, что не так? Пожалуйста, помогите!!
Вот мой Ajax запрос:
//Передача данных через AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // наш PHP обработчик
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
А вот функция в 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');
Использование wp_die();
в конце AJAX-функции решило проблему в моём случае.
Например:
add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );
function my_ajax_function(){
echo json_encode($myvar);
wp_die(); // Важно вызывать эту функцию для завершения AJAX-запроса
}

Можете ли вы разместить действие (ajaxConversion) в ваших данных и проверить?
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});

@BenRacicot : Можешь проверить, есть ли у тебя в PHP коде какие-либо операторы вывода, такие как echo, die() и т.д.?

Для меня решением стало добавление действия wp_ajax_nopriv
. Я тестировал скрипт в одном браузере, будучи авторизованным в админке WordPress, а затем попробовал тот же скрипт в Chrome и понял, что он не работает. После добавления wp_ajax_nopriv
всё заработало. :)
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();
}

Я рекомендую использовать wp_send_json_success() и wp_send_json_error() на стороне сервера. Вам не нужно беспокоиться о die() и т.п., переменная "status" отправляется автоматически, это гораздо чище. Например:
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
Результат будет примерно таким:
{
"success":true,
"data":{"amount":125}
}
Теперь вы можете легко извлечь значения в вашем 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);
}
}
});
Еще одна распространенная проблема - опечатки в имени действия. Они должны быть wp_ajax_nopriv_{действие} или wp_ajax_{действие} для авторизованных пользователей. Например, wp-ajax_nopriv - одна из ошибок, которую я часто допускал раньше.

Вы можете забыть добавить следующую строку:
add_action("wp_ajax_your_ajax_function", "your_ajax_function");
Без этой строки AJAX-запрос не будет выполняться.
Вот ваша AJAX-функция:
function your_ajax_function(){ $result = json_encode($result); echo $result; }

Важно: правильно добавить хук действия в functions.php
Я столкнулся с такой же проблемой, перепробовал все методы, но упустил простую вещь — подключение файла с действием в functions.php
// Добавляем действия для AJAX-запросов (авторизованных и неавторизованных пользователей)
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() {
// Получаем ID вложения из POST-запроса
$attach_id = filter_input( INPUT_POST, 'attach_id' );
// Удаляем вложение
wp_delete_attachment( $attach_id );
// Если в сессии есть массив загруженных изображений
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
// Ищем и удаляем ID из массива
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
// Обновляем массив в сессии
$_SESSION['uploaded_images'] = $array_attachments;
}
// Завершаем выполнение AJAX-запроса
wp_die();
}
