所以,我有一些简单的代码设置,我已经将它简化为仅仅用于测试目的的基本要素。这是我的javascript:
$('a#delete').on('click', function(e) {
e.preventDefault();
$.post($(this).attr('href'), $('input.delete:checked').serialize());
})
这是我的控制器代码:
public function delete() {
debug($this->request->is('ajax'));
debug($this->request->is('post'));
debug($this->request->data);
die();
}
目前我有一个用于测试的复选框:
<input type="checkbox" name="delete_portfolio" class="delete" value="15">
我已验证使用Fiddler它正在发送POST
请求,其中包含&#34; delete_portfolio=15
&#34;的数据。但是,$this->request->is('post')
返回false,即使这正是发送的内容。而$this->request->data
是空的。有趣的是,$this->request->is('get')
实际上返回true,但$this->request->query
仍为空。
我只想弄清楚我向Cake发送AJAX POST
请求的错误。
修改
我只想提供一些我在这里找到的新信息。我最后补充说:
debug($_SERVER['REQUEST_METHOD']);
debug($_POST);
在我的控制器代码中查看PHP为请求方法看到的内容,结果是它按预期返回'POST'
并返回正确的数据,因此它只是CakePHP 3而不是看到它是POST并且没有看到数据,也许这是一个错误?
答案 0 :(得分:2)
我终于找出了什么是错的,并且应该为其他所有人考虑的事情。我启用了安全组件,它将不安全的请求(ajax)重定向到安全请求(https)。因为这种重定向正在发生,它正在将我的请求更改为GET请求,并在我的表单被更改时对我进行黑名单。解决这个问题:
$this->Security->config('unlockedActions', ['delete']);
已添加到我的控制器的beforeFilter
功能。