Ajax成功消息返回我主页的HTML

jam*_*mil 5 ajax wordpress jquery json

使用ajax和wordpress(尝试正确执行).对我来说这是一个新的东西,但我之前有更多的天赋.看似随机开始出现问题,所以我把代码分解到最基本的水平,我甚至无法让它工作!我觉得我只是感到沮丧,这迫使我错过了一个简单的错误.这有什么不对吗?

我的jQuery:

$.post(
    ajaxurl, // http://localhost/mysite/wp-admin/admin-ajax.php
    {action: "post-save"},
    function(response){
      alert(response);
    }
);
Run Code Online (Sandbox Code Playgroud)

我的PHP:

function update_post(){
    echo json_encode(array("success" => "all systems go"), JSON_FORCE_OBJECT ); 
    exit;
}
add_action( 'wp_ajax_post-save', 'update_post' );
Run Code Online (Sandbox Code Playgroud)

最终结果是警报工作,这意味着$ .post成功(对吗?),但返回的变量response是我的主页的html源...

jam*_*mil 3

我想到了...

这可能会帮助像我这样犯同样错误的新手,所以我会回答我自己的问题:)

原来我没有登录,去看看吧。不过,这个反应很奇怪,让我失望了,返回了整个主页。原因是我阻止了我的函数文件,其中包括 Ajax 响应程序,如下所示:

function block_users()
{
    if( !current_user_can( 'delete_pages' ) ) {  
        wp_redirect( get_home_url(), 301 );
        exit;
    }
}
add_action('admin_init','block_users');
Run Code Online (Sandbox Code Playgroud)

我应该知道要登录(我以为是)但是,这样的意外结果而且是星期五:)

另请注意,任何偶然发现这一点的人:如果您确实希望某人在不登录的情况下执行 ajax,请使用 wp_ajax 的无特权版本 wp_ajax_nopriv。

add_action( 'wp_ajax_nopriv_action', 'function' );
Run Code Online (Sandbox Code Playgroud)

替代

add_action( 'wp_ajax_action', 'function' );
Run Code Online (Sandbox Code Playgroud)

前者不需要许可(即登录)即可执行ajax 请求。