我一直试图通过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”视图。
我看不出问题出在哪里。所以,我可以得到任何帮助,我将非常感激。
答案 0 :(得分:0)
如果您在大多数情况下遇到 403禁止错误,会话已过期,则用户必须重新登录。
答案 1 :(得分:0)
你使用'Csrf'组件了吗?就我而言,这就是问题所在。
https://book.cakephp.org/3.0/en/controllers/components/csrf.html#csrf-protection-and-ajax-requests