WordPress中的基本AJAX测试返回400错误

时间:2019-01-17 20:37:19

标签: php jquery ajax wordpress

因此,我遵循了一个非常基础的教程,只是为了弄清楚WordPress中AJAX调用的工作方式。这是所有相关的代码位:

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.log('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错误,而我应该会收到警报,对吗?

400 error message

任何想法都会得到真正的赞赏,我的智慧就此终结。

谢谢。

1 个答案:

答案 0 :(得分:2)

您似乎已在admin-ajax.php的末尾添加了自定义代码。这不是正确的方法,不是。通常,您永远不要编辑核心/管理员WordPress文件,因为更新WordPress时,它将被覆盖(除其他原因外)。

即使忽略它,也不起作用的原因是admin-ajax.php仅在实际请求时才执行,因此您的回调将注册得太晚。您应该在主题的functions.php或插件中添加add_action和相关的回调,以便您的操作将在适当的时候被注册。