Wordpress admin-ajax.php 404错误请求

ika*_*ita 5 ajax wordpress wordpress-theming admin-ajax

我有一个奇怪和令人沮丧的wordpress admin-ajax.php文件的行为,当我发出ajax请求它返回404错误错误请求.

(function( $ ) {
    var ajaxscript = { ajax_url : 'mydomain.com/wp-admin/admin-ajax.php' }
    $.ajax({
        url : ajaxscript.ajax_url,
        data : {
            action : 'cart_clb',
            id : 1
        },
        method : 'POST',
        success : function( response ){ console.log(response) },
        error : function(error){ console.log(error) }
    })
})(jQuery)
Run Code Online (Sandbox Code Playgroud)

在我的functions.php里面

add_action( 'wp_ajax_post_cart_clb', 'cart_clb' );
add_action( 'wp_ajax_nopriv_post_cart_clb', 'cart_clb' );

function cart_clb(){
    echo json_encode($_POST);
    die();
}
Run Code Online (Sandbox Code Playgroud)

如上所述,当我执行请求时:

mydomain.com/wp-admin/admin-ajax.php 400 (Bad Request)
{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我取悦吗?谢谢.

小智 15

wp_ajax_nopriv_(action)为未登录的用户执行。因此,如果您希望它在访问者和登录用户的前端触发,您可以这样做:

add_action( 'wp_ajax_my_action', 'my_action' );// 对于登录用户

add_action( 'wp_ajax_nopriv_my_action', 'my_action' );// 对于非登录用户


Max*_*nar 9

admin-ajax.php 在两种情况下返回错误的请求标头:操作函数未注册时以及操作参数为空时。

我遇到了同样的错误,问题是我忘记了 add_action('wp_ajax_nopriv'...) 我只设置了 wp_ajax_nopriv ,所以当我以管理员嵌套身份登录时,它不起作用。


Iho*_*nov 8

首先,使用完整和绝对URL,使用协议(或至少与协议无关的形式):

var ajaxscript = { ajax_url : '//mydomain.com/wp-admin/admin-ajax.php' } 
Run Code Online (Sandbox Code Playgroud)

其次,你的ajax动作名称不是php回调函数名,而是钩子的动态部分wp_ajax_{action_name} / wp_ajax_nopriv_{action_name},所以在你的情况下它应该是:

data : {
    action : 'post_cart_clb',
    id : 1
},
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该标记为正确答案,因为它突出显示了问题并修复。 (4认同)

小智 8

我已经修改了你的代码,看看这个:

(function( $ ) {
var ajaxscript = { ajax_url : 'mydomain.com/wp-admin/admin-ajax.php' }
$.ajax({
    url : ajaxscript.ajax_url,
    data : {
        action : 'post_cart_clb',
        id : 1
    },
    method : 'POST', //Post method
    success : function( response ){ console.log(response) },
    error : function(error){ console.log(error) }
  })
})(jQuery)
Run Code Online (Sandbox Code Playgroud)

这是 WordPress ajax 的语法: wp_ajax_{Your_action_name} wp_ajax_nopriv_{Your_action_name}

  • 您好,感谢您的所有回复,问题是这样的:wp_ajax_post_cart_clb “_post_”无效,我不得不写 wp_ajax_cart_clb 其中,cart_clb 是 ajax 查询中使用的操作。 (2认同)

Dee*_*pal 5

就我而言,我使用基于类的方法。我发现问题是因为我在构造函数中使用了 wp_ajax_ request 。

如果您在类内部使用ajax方法,请将wp_ajax_句柄移到类外部(写入主插件文件)并传递类名和方法名称。例如:

add_action( 'wp_ajax_your_handle', [ 'Class_Name', 'function_name' ] );
add_action( 'wp_ajax_nopriv_your_handle', [ 'Class_Name', 'function_name' ] ); 
Run Code Online (Sandbox Code Playgroud)