【问题标题】:403 Permission error on Ajax Call in Yii?Yii中Ajax调用的403权限错误?
【发布时间】:2013-08-31 13:37:27
【问题描述】:

我是 Yii 的新手。我创建了一个具有以下代码的模块:

控制器代码:

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete','ajaxdialog'),
            'users'=>array('*'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

这是我想通过 ajax 调用使用的操作:

public function actionAjaxdialog()
{
    $user_id =  $_POST['image_id'];     
    $is_active = $_POST['status'];
    $model = $this->loadModel($image_id);
    $model->is_active = $is_active;
    $model->update();   
}

查看代码:

$(document).ready(function(){
$('.changeStatus').live('click',function(){
    var status = $(this).attr('status');
    if(status==1)
    {
        status=0;
    }
    else
    {
        status=1;
    }
    var id = $(this).attr('image_id');      
    var $link = $(this);

    $.ajax({

        type: "POST",
        url:    "<?php echo Yii::app()->createUrl('Gallery/Ajaxdialog'); ?>",
        data:  {image_id:id,status:status},
        success: function(msg)
        {   
            if(status==0)
            {
                $link.attr('status','0');
                $link.attr('title','In-active :: click to activate.');
                $link.children('img').attr('src','/images/wrong.png');
                AfterStatusChange('Image has been de-activated sucessfully.');
                $link.parent().parent().removeClass('selected');
            }
            else
            {
                $link.attr('status','1');
                $link.attr('title','Active :: click to de-activate.');
                $link.children('img').attr('src','/images/right.png');
                AfterStatusChange('Image has been activated sucessfully.');
                $link.parent().parent().removeClass('selected');
            }


        },
        error: function(xhr){
            //alert("failure"+xhr.readyState+this.url)
            alert("failure"+xhr.responseText);
        }
    });


});
});

我正在处理 localhost,我已使用以下代码更新“.htaccess”文件:

deny from all
Allow from localhost

当我尝试运行它时,它总是给我以下错误:

“禁止访问”

请帮我解决这个问题。

【问题讨论】:

  • 所以你有 apache 或 yii 禁止错误?还要检查这个stackoverflow.com/questions/9507645/htaccess-deny-from-all
  • 你可以使用action admin或action delete吗?
  • @Pitchinnate 我正在使用(用于删除)。
  • 我知道,但您是否也收到了 access forbidden 的信息?
  • @Pitchinnate no.它工作正常。

标签: php jquery yii permissions


【解决方案1】:

我设法用以下 Ajax 代码修复了禁止的问题:

$.ajax({
    url      : "<?php echo Yii::app()->createUrl('test/ajax');?>",
    data     : {},
    type     : "POST",
    dataType : "html",
    success  : function(response){
        $('#test').html(response);
    },
    error    : function(){
        alert("Failed request data from AJAX request");
    }
});

在控制器上:

public function accessRules() {
    return array(
        array(
            'allow',
            'actions' => array('ajax'),
            'users'   => array('@'),
        ),
    );
}

你可以试试这个。

【讨论】:

    【解决方案2】:

    在 ajax 数据中添加 csrfToken。

    $.ajax({
    
            type: "POST",
            url:    "<?php echo Yii::app()->createUrl('Gallery/Ajaxdialog'); ?>",
            data:  {<?= Yii::$app->request->csrfParam; ?> : '<?= Yii::$app->request->csrfToken; ?>',image_id:id,status:status},
            success: function(msg)
            {   
                if(status==0)
                {
                    $link.attr('status','0');
                    $link.attr('title','In-active :: click to activate.');
                    $link.children('img').attr('src','/images/wrong.png');
                    AfterStatusChange('Image has been de-activated sucessfully.');
                    $link.parent().parent().removeClass('selected');
                }
                else
                {
                    $link.attr('status','1');
                    $link.attr('title','Active :: click to de-activate.');
                    $link.children('img').attr('src','/images/right.png');
                    AfterStatusChange('Image has been activated sucessfully.');
                    $link.parent().parent().removeClass('selected');
                }
    
    
            },
            error: function(xhr){
                //alert("failure"+xhr.readyState+this.url)
                alert("failure"+xhr.responseText);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      相关资源
      最近更新 更多