jQuery AJAX POST无法识别CakePHP 3

时间:2015-06-26 04:13:25

标签: jquery cakephp cakephp-3.0

所以,我有一些简单的代码设置,我已经将它简化为仅仅用于测试目的的基本要素。这是我的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并且没有看到数据,也许这是一个错误?

1 个答案:

答案 0 :(得分:2)

我终于找出了什么是错的,并且应该为其他所有人考虑的事情。我启用了安全组件,它将不安全的请求(ajax)重定向到安全请求(https)。因为这种重定向正在发生,它正在将我的请求更改为GET请求,并在我的表单被更改时对我进行黑名单。解决这个问题:

$this->Security->config('unlockedActions', ['delete']);

已添加到我的控制器的beforeFilter功能。