我编写了一个Wordpress插件,它使用Ajax来更新客户端,并且似乎在生产服务器上正常工作。如果使用完全管理员权限登录,我本地wampserver上的相同插件只会返回正确的Ajax响应 - 所有其他用户(包括Public)都会收到html响应,这只是主页!
这显然是我的wampserver的设置问题,但我很困惑的事实是,如果我以管理员身份登录,我可以让插件正常工作。
非常感谢任何有助于识别问题的指示。
感谢几个初始响应,我已经做了一些调查,并且相信在我的注册Ajax挂钩调用其php函数之前可能存在重定向,除非以管理员身份登录。我相信我正在遵循所有正确的Ajax设置(挂钩注册正常和非私有,缓存集假,json编码返回和终止在wp_die()等)。我还发现了一个帖子,其中有人在10个月之前有类似的问题('whitenoisedb',在2015年4月24日7:55问),并且'解决了......在front-page.php中处理AJAX因为它使用admin- Ajax.php'是不可能的,他仍然想知道为什么它不能以'正确'的方式完成!
要重新迭代,问题只发生在我的本地wampserver开发服务器上,并继续使我神秘。
答案 0 :(得分:0)
在您的本地服务器上,除非您是管理员,否则可能会重定向从wp-admin
重定向到主页?如果是这样,您应该使用DOING_AJAX
const来防止重定向ajax调用。
例如:
function admin_redirect()
{
if (is_admin() && !current_user_can('administrator') && !defined('DOING_AJAX'))
{
wp_safe_redirect(home_url());
}
}
add_action('admin_init', 'admin_redirect');
答案 1 :(得分:0)
我曾经遇到过这一段时间。查看this section of the codex它在面向Viewer的方面谈论" Ajax"。有两个动作。一个用于登录的人,另一个用于其他人。具体做法是:
add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
答案 2 :(得分:0)
编辑:尝试将此添加到您的插件或您在本地使用的主题的functions.php文件中:
add_action( 'send_headers', 'add_custom_headers' );
function add_custom_headers() {
if ( true !== WP_DEBUG ) {
return;
}
header( 'Expires: Tue, 01 Jan 2000 00:00:00 GMT' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate, max-age=0' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );
}
您可以尝试一些事项:
确保您在AJAX调用中禁用缓存:$.ajax({ url: '...', cache: false })
。你也可以使用$.ajaxSetup({ cache: false })
,但我建议不要使用它,因为它全局应用设置,可能会干扰其他插件和/或主题。
为脚本版本使用随机字符串以防止其被缓存。我通常在本地开发时在WP_DEBUG
中将wp-config.php
设置为true,然后在将我的脚本和样式排入队列时检查WP_DEBUG
是否为真。如果是这样,我将版本字符串替换为time()
。例如:
$version = ( true === WP_DEBUG ) ? time() : '1.0.0';
wp_enqueue_script( 'script', '...', array(), $version, true );
清除浏览器缓存。
如果您在本地安装了缓存插件,请确保同时清除缓存。
如果这些都不起作用,请尝试重新启动WAMP进程或只是重新启动计算机。