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源...
我想到了...
这可能会帮助像我这样犯同样错误的新手,所以我会回答我自己的问题:)
原来我没有登录,去看看吧。不过,这个反应很奇怪,让我失望了,返回了整个主页。原因是我阻止了我的函数文件,其中包括 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 请求。