400与WordPress AJAX调用错误的请求[复制](400 Bad Request with

2019-10-29 04:59发布

这个问题已经在这里有一个答案:

  • WordPress管理-ajax.php 404个错误的请求 2回答

我工作的一个WordPress网站的前端有一个搜索插件。 目前,我不断收到一个400错误的请求错误,我不明白为什么。 我已经审查了SO和WordpressStackExchange很多问题,但不能看到我要去哪里错了,没什么似乎格格不入。 请给我指导:

plugin.php:

function my_admin_scripts() {
    $localize = array(
        'ajaxurl' => admin_url( 'admin-ajax.php' )
    );

    wp_register_script('veh-app-search', plugin_dir_url( __FILE__ ) . '/ajax.js', '', '', true);

    wp_localize_script( 'veh-app-search', 'veh_app_script', $localize);

    wp_enqueue_script( 'veh-app-search', plugin_dir_url( __FILE__ ) . '/ajax.js', array( 'jquery' ) );
}  

add_action( 'wp_enqueue_scripts', 'my_admin_scripts' );
add_action( 'wp_ajax_the_ajax_hook', 'handle_request' );
add_action( 'wp_ajax_nopriv_the_ajax_hook', 'handle_request' ); 

    //takes care of the $_POST data
function handle_request(){
    echo "hello";
}

ajax.js

    var data = {
        action: 'handle_request',
        RequestType: 'category',
        Category:  jQuery('#Category option:selected').val()
    };

    jQuery.post(
        veh_app_script.ajaxurl,
        data,
        function(categories){
            console.log(categories);
        }
    );

人们期望看到的“Hello”在控制台中,但我只看到在控制台上的错误:

jquery.js?ver=1.12.4:4 POST http://localhost/wp-admin/admin-ajax.php 400 (Bad Request)

Answer 1:

请更换密码,并检查

plugin.php

function my_admin_scripts() {
    $localize = array(
        'ajaxurl' => admin_url( 'admin-ajax.php' )
    );

    wp_enqueue_script( 'veh-app-search', plugin_dir_url( __FILE__ ) . '/ajax.js', array( 'jquery' ) );

    wp_localize_script( 'veh-app-search', 'veh_app_script', $localize);


}  

add_action( 'wp_enqueue_scripts', 'my_admin_scripts' );
add_action( 'wp_ajax_handle_request', 'handle_request' );
add_action( 'wp_ajax_nopriv_handle_request', 'handle_request' ); 

    //takes care of the $_POST data
function handle_request(){
    echo "hello";
}

ajax.js

var data = {
        action: 'handle_request',
        RequestType: 'category',
        Category:  jQuery('#Category option:selected').val()
    };

    jQuery.post(
        veh_app_script.ajaxurl,
        data,
        function(categories){
            console.log(categories);
        }
    );


Answer 2:

使用JSON来代替:

function handle_request(){
  echo json_encode( array( "message" => "hello" ) );
  exit;
}

解析JSON在ajax.js响应处理:

function( response ) {
  var returndata = JSON.parse( response );
  console.log( returndata.message );
}

不要忘记添加json2作为依赖于你的脚本。

wp_enqueue_script( 'veh-app-search', plugin_dir_url( __FILE__ ) . '/ajax.js', array( 'jquery', 'json2' ) );


文章来源: 400 Bad Request with Wordpress AJAX call [duplicate]
标签: php wordpress