AJAX不适用于某些用户角色

时间:2015-07-09 作者:Mike

是什么导致前端Ajax请求对某些用户角色不起作用?

我已成功注册(排队)我的。我知道我已经成功注册了ajaxurl,就好像我警告(myhandle.ajaxurl)我看到了管理ajax的正确路径一样。php。

当我以管理员身份登录并转到前端时,Ajax将成功执行。但是,当使用自定义用户角色登录时,它不起作用。。。事实上,我知道它并不是在执行我的PHP文件,应该为Ajax响应调用该文件,就好像我输入了一个错误日志条目,它没有被写入一样。我知道该文件是可用的,但就好像我在文件顶部添加了相同的error\\u日志条目一样(在我的函数之外),它确实会被写入!

有什么明显的地方我可能错过了吗?

下面是正在使用的相关代码片段

//我的主插件类

include( MDJM_CLIENTZONE . \'/includes/mdjm-dynamic.php\' ); // Ajax functions, front & backend
//执行排队的类

function __construct()  {
    /* -- Hooks -- */
    add_action( \'wp_enqueue_scripts\', array( &$this, \'client_zone_enqueue\' ) ); // Styles & Scripts     
}


function client_zone_enqueue()    {
    wp_register_script( \'mdjm-dynamics\', WPMDJM_PLUGIN_URL . \'/client-zone/includes/js/mdjm-dynamic.js\', array( \'jquery\' ) );
}
//mdjm动态。php

function update_addon_options() {
    $dj = $_POST[\'dj\'];
    $event_package = $_POST[\'package\'];
    $addons = mdjm_addons_dropdown( array( 
                                        \'name\'      => \'event_addons\',
                                        \'dj\'        => !empty( $dj ) ? $dj : \'\',
                                        \'package\'   => $event_package,
                                        ), false );

    if( !empty( $addons ) ) {
        $result[\'type\'] = \'success\';
        $result[\'addons\'] = $addons;
    }
    else    {
        $result[\'type\'] = \'error\';
        $result[\'msg\'] = \'No addons available\';
    }
    echo json_encode( $result );

    die();
} // update_addon_options
add_action( \'wp_ajax_mdjm_update_addon_options\', \'update_addon_options\' );
add_action( \'wp_ajax_nopriv_mdjm_update_addon_options\', \'update_addon_options\' );
//脚本应执行的页面

wp_enqueue_script( \'mdjm-dynamics\' );
wp_localize_script( \'mdjm-dynamics\', \'mdjmaddons\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
//JS

jQuery(document).ready(function($)  {
    $(\'#_mdjm_event_package\').on(\'change\', \'\', function()   {

        var package = $("#_mdjm_event_package option:selected").val();
        var dj = $("#event_dj").val();
        var addons = $("#event_addons");
        $.ajax({
            type: "POST",
            dataType: "json",
            url: mdjmaddons.ajax_url,
            data: {
                package : package,
                dj : dj,
                action : "mdjm_update_addon_options"
            },
            beforeSend: function()  {
                $("#event_addons").addClass( "mdjm-updating" );
            },
            success: function(response) {
                if(response.type == "success") {
                    $("#event_addons").removeClass( "mdjm-updating" );
                    addons.empty(); // Remove existing options
                    addons.append(response.addons);
                }
                else    {
                    alert(response.msg);
                    $("#event_addons").removeClass( "mdjm-updating" );
                }
            }
        });
    });
});
另外,我知道我没有检查安全性,一旦当前问题解决,我将添加此内容。

如前所述,这在后端工作,如果以管理员身份登录,也可以在前端工作。只是当以自定义角色的用户身份登录时,情况并非如此。JS在addClass工作和mdjm动态时执行。php文件可用,因为当包含该文件时,我可以从函数外部将msgs发送到php error\\u log

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

好的,我发现了问题。

直接输入myurl/wp-admin/admin-ajax时。php?action=mdjm\\u update\\u addon\\u选项进入我的浏览器窗口当以管理员身份登录时,我得到了预期的响应0。然而,当我没有登录或以非管理员身份登录时,我注意到我收到了“您没有足够的权限访问此页面”。

查看我的插件文件,我注意到在我的设置类中有一个条目。。。

if( !current_user_can( \'manage_options\') )
    die( "You do not have sufficient permissions to access this page." );
去掉这个,一切都正常了。

结束

相关推荐

WP AJAX不工作,始终返回0

我在这里检查了所有与此相关的线程,并进行了调试测试。我想了解为什么我自己的代码不起作用,因为它提供了与此问题相关的所有可能创建的线程中解释的相同功能。我试图在单击复选框时发送AJAX请求,并使用MySQL进行一些工作。以下是一些详细信息,以了解范围和所做的工作:var $ = jQuery; $(function() { $(\'table.table\').on(\'click\', \'[name=\"term-id\"]\', function() {