php - CakePHP4 - 使用 Ajax 创建记录
问题描述
我是使用 CakePHP 的新手,我正在努力弄清楚如何添加一个可以使用 ajax 发布到不同数据库表的表单。基本上,我有一个执行搜索的表单,它工作正常,但在用户执行搜索之前,我需要捕获他的电子邮件和其他一些字段,并将它们存储在我的数据库中的单独表中。
虽然我已经能够设置表单并将数据发送到控制器,但我无法通过错误 400 / 错误请求。我不确定是不是因为我的帖子网址设置错误(已启用:$this->loadComponent('FormProtection');
任何帮助或指导将不胜感激!我无法弄清楚这一点,也许我正在处理错误的问题或者我应该使用帖子链接(如果可能的话)。
我目前拥有的设置:
index.php => website.com/app/services:
<div id="user_basics">
<?= $this->Form->create() ?>
<fieldset>
<legend><?= __('Add Visitor') ?></legend>
<?php
echo $this->Form->control('name');
echo $this->Form->control('email');
echo $this->Form->control('city');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
</div>
jQuery:
$('#user_basics form').submit(function(event) {
var ajaxdata = $("#user_basics form").serializeArray();
event.preventDefault();
$.ajax({
url:"<?= $this->Url->build(["controller" => "visitors","action" => "addExternal"]); ?>",
type:"POST",
headers: $('[name="_csrfToken"]').val(),
data:ajaxdata,
dataType: "json",
success:function(response) {
console.log(response);
console.log("success");
},
error: function(response) {
console.error(response.message, response.title);
console.log("nope");
}
});
});
我没有在 addExternal 操作中包含控制器文件。
注意:我指的是访问者控制器,我相信这是正确的方法 - 将用户的数据发送到已经设置为连接到数据库的访问者控制器)
解决方案
一个简单的错误
var ajaxdata = $("#user_basics form").serializeArray();
您正在尝试从具有“user_basics 表单”的表单中序列化数组。这里 id "user_basic" 可能有多种形式。所以最好用 id 创建表单
<?= $this->Form->create(null,[
'id'=>'user_basic_form',
]) ?>
var ajaxdata = $("#user_basic_form").serializeArray();
推荐阅读
- c# - 更改日历中的可见月份
- sql - 创建列出某些数据(无论它是否存在)的 SQL 查询
- javascript - 用于控制交互式 PDF 文件中的复选框选择的 JavaScript
- html - 如何控制弹性项目的宽度比例?
- angular - 外部化角度配置文件( config.json )
- dns - 如何在特定区域查找 DNS 记录
- javascript - Angular Reactive Form中的FormArray未在表单提交时重置
- python - 在 Python 中,将参数的默认值设置为函数是一种不好的形式吗?
- google-sheets - 如果满足 2 个条件,则给出准确的结果
- c++ - 如何动态分配双结构指针?