在启用 crsf 和安全组件的情况下,在 cakephp 3.4 中通过 ajax 发送表单
Sending form via ajax in cakephp 3.4 with crsf and security components enabled
需要帮助,
我希望能够通过 ajax 将表单发送到控制器进行处理,同时在 App 控制器 (cakephp 3.4) 中启用 crsf 和安全组件。将不胜感激我能得到的任何帮助。谢谢
为了发送 ajax 请求,您需要首先通过文档中指定的 head 请求发送 csrf 令牌 (link)
Cakephp 3.6+
这是一个带有 jquery ajax 调用的示例
$.ajax({
url: '<?php echo $this->Url->build(['controller' => 'Foo', 'action' => 'bar'])?>',
beforeSend: function(xhr){
xhr.setRequestHeader('X-CSRF-Token', '<?php echo $this->request->getParam('_csrfToken') ?>'));
}
});
Cakephp 3.6以下
您需要为 javascript 创建或使用 cookie reader(如:js-cookie)
这是一个带有 jquery ajax 调用和 js-cookie:
的示例
$.ajax({
url: '<?php echo $this->Url->build(['controller' => 'Foo', 'action' => 'bar'])?>',
beforeSend: function(xhr){
xhr.setRequestHeader('X-CSRF-Token', Cookies.get('csrfToken'));
}
});
编辑:cakephp 3.6 发布后更新了答案
需要帮助,
我希望能够通过 ajax 将表单发送到控制器进行处理,同时在 App 控制器 (cakephp 3.4) 中启用 crsf 和安全组件。将不胜感激我能得到的任何帮助。谢谢
为了发送 ajax 请求,您需要首先通过文档中指定的 head 请求发送 csrf 令牌 (link)
Cakephp 3.6+
这是一个带有 jquery ajax 调用的示例
$.ajax({
url: '<?php echo $this->Url->build(['controller' => 'Foo', 'action' => 'bar'])?>',
beforeSend: function(xhr){
xhr.setRequestHeader('X-CSRF-Token', '<?php echo $this->request->getParam('_csrfToken') ?>'));
}
});
Cakephp 3.6以下
您需要为 javascript 创建或使用 cookie reader(如:js-cookie)
这是一个带有 jquery ajax 调用和 js-cookie:
的示例$.ajax({
url: '<?php echo $this->Url->build(['controller' => 'Foo', 'action' => 'bar'])?>',
beforeSend: function(xhr){
xhr.setRequestHeader('X-CSRF-Token', Cookies.get('csrfToken'));
}
});
编辑:cakephp 3.6 发布后更新了答案