Базовый тест AJAX в WordPress возвращает ошибку 400

Поэтому я следовал очень простому руководству, чтобы понять, как работают вызовы AJAX в WordPress. Вот все соответствующие фрагменты кода:

На functions.php

add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue() {

    wp_enqueue_script( 'ajax-script', get_template_directory_uri() .'/js/my_query.js', array('jquery') );

    // in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
    wp_localize_script( 'ajax-script', 'ajax_object',
        array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
}

На my_query.js

jQuery(document).ready(function($) {

    console.info('myquery');

    var data = {
        'action': 'my_action',
        'whatever': ajax_object.we_value      // We pass php values differently!
    };
    // We can also pass the url value separately from ajaxurl for front end AJAX implementations
    jQuery.post(ajax_object.ajax_url, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});

и внизу admin-ajax.php

add_action( 'wp_ajax_my_action', 'my_action' );
function my_action() {
    global $wpdb;
    $whatever = intval( $_POST['whatever'] );
    $whatever += 10;
        echo $whatever;
    wp_die();
}

Это охватывает все пункты руководства, но при загрузке страницы администратора я получаю ошибку 400, в то время как я должен получать предупреждение, верно?

Базовый тест AJAX в WordPress возвращает ошибку 400

Любые идеи будут по-настоящему оценены, я в своем уме.

Спасибо.

Подождите, вы редактировали admin-ajax.php? Вы не должны редактировать какие-либо основные/административные файлы WordPress, они будут перезаписаны, как только вы обновите WP. Обратный вызов вашего действия должен быть добавлен в functions.php вашей темы или в плагин.

Aioros 17.01.2019 21:44

400 обычно связан с неправильным форматированием запроса. Дважды проверьте, что у вас есть все, что вам нужно. О чем следует подумать: токен CSRF, тип данных и т. д.

Scott Sword 17.01.2019 21:44

Если учебник рекомендует редактировать admin-ajax.php, я бы предложил попробовать другой. Как сказал Айорос, это неправильный способ регистрации обратных вызовов AJAX в WordPress.

cabrerahector 17.01.2019 22:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вы добавили свой собственный код в конце admin-ajax.php. Это нет правильный способ сделать это. В общем, вы никогда не должны редактировать основной/административный файл WordPress, потому что он будет перезаписан при обновлении WordPress (помимо других причин).

Даже игнорируя это, причина, по которой он не работает, заключается в том, что admin-ajax.php выполняется только при фактическом запросе, поэтому ваш обратный вызов будет зарегистрирован слишком поздно. Вы должны добавить свой add_action и относительный обратный вызов в functions.php вашей темы или в плагин, чтобы ваши действия были зарегистрированы в нужное время.

В документации не указано, куда делся my_action. Я по глупости предположил, что если вы указываете на файл, вам нужно что-то в этом файле, чтобы поймать его. теперь понял спасибо

bboybeatle 18.01.2019 14:17

Другие вопросы по теме