首页 > 解决方案 > 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 操作中包含控制器文件。

注意:我指的是访问者控制器,我相信这是正确的方法 - 将用户的数据发送到已经设置为连接到数据库的访问者控制器)

标签: phpajaxcakephpcakephp-4.x

解决方案


一个简单的错误

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();

推荐阅读