Eroare 400 Bad Request la folosirea AJAX în tema personalizată WordPress

7 mar. 2018, 16:40:00
Vizualizări: 26.5K
Voturi: 1

Am lucrat la o temă personalizată în care încerc să implementez o căutare bazată pe AJAX. Am construit totul conform mai multor tutoriale și ghiduri, dar când inspectez apelul către admin-ajax, acesta continuă să returneze erori 400... Nu mai am idei și sper că cineva mă poate ajuta să înțeleg problema.

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('are postări');
} else {
    echo json_encode('nu s-au găsit postări');
}

wp_die();
}

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

Încărcarea scripturilor în 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
Comentarii

Proprietatea post_type din cererea ta AJAX ar trebui să fie în data, altfel $_REQUEST['post_type'] nu va fi setată. De asemenea, acest tip de cerere ar trebui să fie GET, nu POST. Folosește POST doar pentru cererile care au un 'efect secundar' precum adăugarea de date în baza de date. Tu doar preiei date, deci GET este mai potrivit.

Jacob Peattie Jacob Peattie
7 mar. 2018 17:06:46
Toate răspunsurile la întrebare 1
2

Am rezolvat. Am șters două linii:

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

Când le-am șters, am primit un răspuns 200 cu textul de răspuns corespunzător.

7 mar. 2018 16:58:19
Comentarii

Dacă te aștepți să primești un răspuns în format JSON, atunci dataType trebuie să fie 'json'.

Jacob Peattie Jacob Peattie
7 mar. 2018 17:08:13

Poți să dai click pe bifa de lângă răspuns pentru a-l accepta?

nmr nmr
6 apr. 2019 15:37:57