Ajax возвращает 400 неверных запросов (xhr), admin-ajax.php возвращает '0'? - PullRequest
0 голосов
/ 21 января 2019

Так что у меня ограниченный опыт работы с Ajax, и я не совсем уверен, как отладить / решить проблему. Ошибка в вопросе;

admin-ajax.php - 400 неверных запросов (xhr).

Я проверил загруженный ресурс и могу получить ответ «0». Посмотрев на него, я вижу, что ответ «0» означает, что либо действие не установлено (в данных ajax), либо функция обратного вызова действия не может быть найдена.

Поскольку я установил действие, я могу только предположить, что это потому, что функция обратного вызова не может быть найдена. Но проверка кода не содержит опечаток в обратных вызовах?

Любая помощь, которую я мог бы получить, была бы очень признательна.

functions.php

add_action('wp_head', function(){   
    require_once( get_stylesheet_directory() .'/inc/better-comments.php' );
    require( get_stylesheet_directory() .'/inc/ajax.php' );
});

ajax.php

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
}

add_action('wp_ajax_nopriv_front_load_more', 'front_load_more');
add_action('wp_ajax_front_load_more', 'front_load_more');

function front_load_more() {

    global $post;
    $post = get_post( $_POST['post_id'] );
    setup_postdata( $post );

    wp_list_comments( array( 'callback' => 'better_comments' ) );

    die();

};

theme.js

jQuery(document).ready(function($){
    $(document).on('click', '.front-load-more', function(){

        var button = $(this);

        // decrease the current comment page value
        cpage--;

        $.ajax({
            url : ajaxurl, // AJAX handler, declared before
            data : {
                'action' : 'front_load_more',
                'post_id': parent_post_id, // the current post
                'cpage' : cpage, // current comment page
            },
            type : 'POST',
            beforeSend : function ( xhr ) {
                button.text('Loading...'); // preloader here
            },
            success : function( data ){
                if( data ) {
                    $('ol.comment-list').append( data );
                    button.text('More comments'); 
                     // if the last page, remove the button
                    if ( cpage == 1 )
                        button.remove();
                } else {
                    button.remove();
                }
            }
        });
        return false;

    });
});

comments.php (триггер)

<?php   
  $cpage = get_query_var('cpage') ? get_query_var('cpage') : 1;

  if( $cpage > 1 ) {
    echo '<a class="btn btn-block btn-soft-primary transition-3d-hover front-load-more">Load More</a>
       <script>
       var ajaxurl = \'' . admin_url('admin-ajax.php') . '\',
            parent_post_id = ' . get_the_ID() . ',
            cpage = ' . $cpage . '
       </script>';
   }
?>

Изменено - add_action ('wp_ajax_nopriv_front_load_more', 'front_load_more');

Изменено - add_action ('wp_ajax_front_load_more', 'front_load_more');

РЕДАКТИРОВАТЬ: 21 января 15: 23 Как сказал @cabrerahector, в моем файле ajax.php был код, который нужно было переместить в мой файл functions.php. Это решило проблему неверного запроса.

1 Ответ

0 голосов
/ 21 января 2019

Проблема в том, что код, который вы используете в ajax.php, должен быть в functions.php вместо этого: ваши wp_ajax_* ловушки действий неправильно регистрируются в WordPress, следовательно, отклик 400 Bad Request вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...