【问题标题】:Wordpress Admin Ajax 400 (Bad Request)Wordpress Admin Ajax 400(错误请求)
【发布时间】:2019-03-08 08:41:46
【问题描述】:

我使用了 Wordpress Admin Ajax,控制台显示 400(错误请求)

    jQuery('#submitid').click(function(e){
    e.preventDefault();
    //var newCustomerForm = jQuery(this).serialize();

    jQuery.ajax({
        type: "POST",
        url: "wp-admin/admin-ajax.php",
        data: {status: 'status', name: 'name'},
        success:function(data){
             jQuery("#result").html(data);
        }
    });
});

【问题讨论】:

标签: php ajax wordpress


【解决方案1】:

Wordpress AJAX 流程有一些基本要点,如果您希望它正常工作,应该遵循这些要点:

1.在functions.php中添加你想从前端调用的动作:

function logged_in_action_name() {
  // your action if user is logged in
}
function not_logged_in_action_name() {
  // your action if user is NOT logged in
}

add_action( 'wp_ajax_logged_in_action_name', 'logged_in_action_name' );
add_action( 'wp_ajax_nopriv_not_logged_in_action_name', 'not_logged_in_action_name' );

2.在functions.php中注册本地化对象

// Register the script
wp_register_script( 'some_handle', 'path/to/myscript.js' );

// Localize the script with new data
$some_object = array(
    'ajax_url' => admin_url( 'admin-ajax.php' )
);

wp_localize_script( 'some_handle', 'ajax_object', $some_object );

// Enqueued script with localized data.
wp_enqueue_script( 'some_handle' );

3.在前端创建AJAX请求

// source: https://codex.wordpress.org/AJAX_in_Plugins
var data = {
  'action': 'not_logged_in_action_name',
  'whatever': 1234
};

jQuery.post( ajax_object.ajax_url, data, function( response ) {
  console.log( response );
}

【讨论】:

  • 注意:如果您将 ajax 逻辑保存在 functions.php 文件之外,请不要忘记在 functions.php 中要求该文件。
【解决方案2】:

所有 Wordpress Ajax 调用都必须有 action 参数,它指向钩子 wp_ajax_{action_param}wp_ajax_nopriv_{action_param},然后从那里跳转到该钩子的函数。

来自Codex

add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );

function my_action() {
    $status = $_POST['status'];
}

【讨论】:

    【解决方案3】:

    首先你不应该自己写网址。您可以使用 localize 函数将 url 添加到您的 javascript 文件中:

    wp_enqueue_script('myHandle','pathToJS');
    
    wp_localize_script(
       'myHandle',
       'ajax_obj',
        array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) )
    );
    

    之后,您可以在脚本中使用ajax_obj.ajax_url 来接收网址。

    第二,你是否实现了正确的钩子?

    // Only accessible by logged in users
    add_action( 'wp_ajax_my_action', 'my_action_callback' );
    // Accessible by all visitors
    add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
    

    最好的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多