未登录用户的WordPress AJAX呼叫不起作用

时间:2012-03-02 作者:user1147

我有一个前端搜索框,我为它实现了自动完成,当我登录时,它对我来说非常有用。

但当我没有登录时,由于ajax调用,我得到302,响应头中有位置,所以它试图重定向,我不知道为什么。我注意到很多关于这个问题的帖子,但没有一个帖子/问题对我没有帮助。

我的代码,在用户登录时有效,但在用户未登录时无效,请帮助。

jQuery

$.ajax({
    type: \'POST\',
    url: MyAjax.ajaxurl,
    data: {
        action : \'myajax-submit\',
        term : request.term,
        _ajax_nonce : MyAjax.ajax_nonce
    },
    dataType: "json",
    beforeSend: function(jqXHR, settings){
    },
    success: function(data, textStatus, jqXHR){
        response(data);
    },
    error: function(jqXHR, textStatus, errorThrown){
        response([{
            \'value\':\'Error retriveing data\',
            \'id\':1
        }]);
    },
    complete: function(jqXHR, textStatus){
    },
    statusCode: {                    
    }
});
php
add_action(\'wp_ajax_myajax-submit\', \'myajax_submit\');


add_action(\'wp_ajax_nopriv_myajax-submit\', \'myajax_submit\');
 
    function myajax_submit() {
        global $wpdb;
    
        //check_ajax_referer(\'myajax_nonce\', \'_ajax_nonce\');
    
        if (isset($_POST["term"])) {
            $q = strtolower($_POST["term"]);

            .....
    
            $json_response = array();
    
            ...
    
            header("Cache-Control: no-cache, must-revalidate");
            header("Pragma: no-cache");
            header("Content-type: text/x-json");
            
            print json_encode($json_response);
            
            die();
        }
}

2 个回复
最合适的回答,由SO网友:Chris_O 整理而成

听起来您对另一个插件或函数有问题,该插件或函数试图阻止未登录或非管理员用户访问wp admin区域,因此它是从wp admin/admin ajax重定向的。php并给出您的302响应。

如果定义了do\\u AJAX常量,则需要找到执行此操作的代码,并添加一个不重定向的条件。

SO网友:kaiser

非管理员请求。。。仍然是内部的管理请求admin-ajax.php 常量WP_ADMIN 设置为TRUE. 例如,如果您将文件包装在if ( ! is_admin() ), 那么您的请求将在开始时中止admin-ajax.php.

结束

相关推荐

Mu-plugins文件夹在多站点安装中是如何工作的?

我对什么时候应该将插件文件放入mu插件有点困惑。我知道它必须使用插件,而且我知道它们是自动启用的。但是,在网络设置中,这是否会强制在所有子博客中启用插件文件?这是有道理的,那么这是我唯一一次应该在网络中放置插件文件吗?我什么时候希望插件代码在每个子博客中运行?例如,如果我想自动设置一个新的缩略图大小,我应该在那里这样做吗?或者还有其他例子吗。那么网络激活呢?