Cakephp 3.4 AJAX请求抛出403禁止错误

时间:2017-09-12 23:10:11

标签: php jquery ajax cakephp-3.0 http-status-code-403

我一直试图通过AJAX向控制器发送一些数据,但对于我的生活,我似乎无法使其工作;每次我发出请求时,都会抛出403禁止错误。

这是ajax请求:

$.ajax({
            type: 'post',
            url:"<?php echo Router::url(array('controller'=>'Atls','action'=>'saveTime', '_ext' => 'json'));?>",
            dataType: 'json',
            data: {atl_id: idTimerPaused, time: actual_time},
            beforeSend: function(xhr){

            },
            success: function (response) {

                console.log('Nailed It');

            },
            error: function(jqXHR, exception){
                console.log(jqXHR);
            }
});
return false;

控制器动作:

public function saveTime()
{

    if ($this->request->is('post') && $this->request->is('ajax')) {
        $content = $this->request->getData();

            $query = $this->Atls->query();
            $result = $query
                ->update()
                ->set(
                    $query->newExpr('actual_time = '. $content['time'])
                )
                ->where([
                    'id' => $content['atl_id']
                ])
            ->execute();

        $this->set(compact('content'));
        $this->set('_serialize', ['content']);

        $this->render('ajax_response', 'ajax');
    }
}

我在routes.php文件中加载了扩展名(Router :: extensions('json','xml');)

还会加载请求处理程序并允许该函数:

public function initialize()
{
    parent::initialize();
    $this->loadComponent('RequestHandler');
}

public function beforeFilter(Event $event)
{
    parent::beforeFilter($event);
    $this->Auth->allow('saveTime');

    //Change layout for Ajax requests
    $this->viewBuilder()->layout('appTemplate');
    if ($this->request->is('ajax')) {
       $this->viewBuilder()->layout('ajax');
    }
}

还添加了“ajax_response”视图。

我看不出问题出在哪里。所以,我可以得到任何帮助,我将非常感激。

2 个答案:

答案 0 :(得分:0)

如果您在大多数情况下遇到 403禁止错误,会话已过期,则用户必须重新登录。

答案 1 :(得分:0)

你使用'Csrf'组件了吗?就我而言,这就是问题所在。

https://book.cakephp.org/3.0/en/controllers/components/csrf.html#csrf-protection-and-ajax-requests