2015-06-26 104 views
1

所以,我有一些简单的代码设置,我已经将它简化为仅仅用于测试目的的基本要素。下面是我的javascript:jQuery AJAX POST未被识别CakePHP 3

$('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"> 

我一直在使用验证提琴手,它发送POST请求数据“delete_portfolio=15”。但是,$this->request->is('post')返回false,即使这正是发送的内容。 $this->request->data为空。有趣的是,$this->request->is('get')实际上返回true,但$this->request->query仍然是空的。

我只是想弄清楚我在做什么错误发送一个AJAX POST请求蛋糕。

编辑

我只是想包括我在这里找到了一些新的信息。最后我补充说:

debug($_SERVER['REQUEST_METHOD']); 
debug($_POST); 

要我控制器代码,看看PHP所看到的请求的方法,原来它返回'POST'预期,并返回正确的数据,所以才CakePHP的3,这不是把它看作POST并没有看到数据,也许这是一个错误?

+0

所以,问题不在于单击事件不起作用。正如我在问题中所述,我可以看到带有Fiddler的POST请求以及数据。我报告了我从控制器返回的内容,该控制器也收到了请求。我没有在HTML中包含我点击的链接,因为我觉得这是不相关的,因为问题不在于点击事件。 –

+0

检查'REQUEST_METHOD' [** server var **](http://php.net/manual/en/reserved.variables.server.php),如果在确定发送POST时不是'POST' '请求,那么你的服务器/ PHP安装需要一个或两个bitchslaps。 – ndm

回答

1

我终于弄明白了什么是错的,以及其他人一定要考虑的事情。我启用了安全组件,它将不安全的请求(ajax)重定向到安全请求(https)。由于此重定向正在发生,它正在将我的请求更改为GET请求,并在我的表单被更改后拒绝我。为了解决这个问题:

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

被添加到我的控制器的beforeFilter函数。