您仍然可以使用 Cake 提供的表单安全机制进行安全的 ajax 调用。为此,请呈现一个不可见的表单并放置输入以存储 ajax 调用参数。然后,使用 Javascript 在您的表单中设置这些参数并通过序列化来执行 ajax 调用。请记住,如果您启用了 CSRF 检查(并且禁用了每个会话一个令牌),您将必须使用新的有效 CSRF 令牌更新表单(您可以在控制器中使用 读取它$this->request->params['_Token']['key']
)。
例子:
<?php
echo $this->Form->create('AjaxForm');
echo $this->Form->hidden('value');
echo $this->Form->end();
?>
<script>
function makeAjaxCall() {
$.post(
ajaxUrl,
$('#AjaxForm').serialize(),
function(data) {
$('#AjaxForm [name="data[_Token][key]"]').val(data.newCsrfToken)
}
);
};
</script>
为了进一步参考,我们创建了一个组件,该组件允许在动态修改的客户端表单上保持启用的安全性,并且在进行 ajax 调用时无需解锁字段或操作。您可以在https://github.com/QTSdev/DynamicSecurity找到它。