5

使用 ajax 和 wordpress(尝试正确执行)。这对我来说相当新,但我以前有过这种工作,而且更有天赋。似乎是随机开始出现问题,所以我将代码分解到最基本的级别,我什至无法让它工作!!!我觉得我只是感到沮丧,这迫使我错过一个简单的错误。这有什么问题吗?

我的 jQuery:

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

我的PHP:

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

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

4

2 回答 2

3

我想到了...

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

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

function block_users()
{
    if( !current_user_can( 'delete_pages' ) ) {  
        wp_redirect( get_home_url(), 301 );
        exit;
    }
}
add_action('admin_init','block_users');

我应该知道登录(以为我是)但是,如此意想不到的结果,那是星期五:)

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

add_action( 'wp_ajax_nopriv_action', 'function' );

替代

add_action( 'wp_ajax_action', 'function' );

前者不需要权限,即登录,来做ajax请求。

于 2013-04-01T18:02:53.383 回答
2

我遇到了同样的问题,解决方法是将 DOING_AJAX 添加到函数中

function block_users()
{
    if( !current_user_can( 'delete_pages' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
        wp_redirect( get_home_url(), 301 );
        exit;
    }
}
add_action('admin_init','block_users');
于 2015-02-11T09:15:19.757 回答