Исправление ошибки 400 Bad Request при использовании AJAX в пользовательской теме

7 мар. 2018 г., 16:40:00
Просмотры: 26.5K
Голосов: 1

Я работаю над пользовательской темой, в которой пытаюсь реализовать поиск с использованием AJAX. Я создал всё согласно нескольким руководствам, но при проверке вызова admin-ajax постоянно возвращается ошибка 400... У меня закончились идеи, и я надеюсь, что кто-то сможет помочь разобраться с этой проблемой.

functions.php

function load_search_results(){
$q = $_REQUEST['query'];
$post_type = $_REQUEST['post_type'];

$args = array(
    'post_type' => $post_type,
    'post_status' => 'publish',
    's' => $q,
);

$search = new WP_Query($args);

if ($search->have_posts()){
    echo json_encode('есть записи');
} else {
    echo json_encode('записи не найдены');
}

wp_die();
}

add_action('wp_ajax_load_search_results', 'load_search_results');
add_action('wp_ajax_nopriv_load_search_results', 'load_search_results');

Подключение скриптов в functions.php

wp_register_script('ajax-search', THEME_DIR .'/assets/js/ajax/search.ajax.js', array('jquery'), '1.0', false);
wp_enqueue_script('ajax-search');
wp_localize_script('ajax-search', 'myAjax', array('ajax_url' =>admin_url('admin-ajax.php')));

search.ajax.js

(function($) {

$(document).on('submit', '.controls-search', function(){
    var $form = $(this);
    var $input = $form.find('input[name="s"]');
    var query = $input.val();
    var $content = $('.licence');

    $.ajax({
        type: 'POST',
        post_type: 'shuffle_licence',
        url: myAjax.ajax_url,
        data: {
            action: 'load_search_results',
            query: query
        },
        beforeSend: function(){
            $input.prop('disabled', true);
            $content.addClass('loading')
        },
        succes: function(response){
            $input.prop('disabled', false);
            $content.removeClass('loading');
            $content.html(response);
        },
        dataType: 'html',
        contentType: 'application/json',
    });

    return false;

});

}(jQuery))
1
Комментарии

Свойство post_type вашего AJAX-запроса должно быть в data, иначе $_REQUEST['post_type'] не будет установлено. Кроме того, такой тип запроса должен быть GET, а не POST. Используйте POST только для запросов, которые имеют "побочный эффект", например, добавление чего-то в базу данных. Вы просто получаете данные, поэтому GET здесь более уместен.

Jacob Peattie Jacob Peattie
7 мар. 2018 г. 17:06:46
Все ответы на вопрос 1
2

Я разобрался. Я удалил две строки:

dataType: 'html',
contentType: 'application/json'

После удаления этих строк я получил ответ 200 с ожидаемым текстом ответа.

7 мар. 2018 г. 16:58:19
Комментарии

Если вы ожидаете ответ в формате JSON, то dataType должен быть 'json'.

Jacob Peattie Jacob Peattie
7 мар. 2018 г. 17:08:13

Можете ли вы нажать на галочку рядом с ответом, чтобы принять его?

nmr nmr
6 апр. 2019 г. 15:37:57