CakePHP4 Ajax:从控制器发送到视图

Posted

技术标签:

【中文标题】CakePHP4 Ajax:从控制器发送到视图【英文标题】:CakePHP4 Ajax: Send from Controller to View 【发布时间】:2021-12-20 16:38:45 【问题描述】:

我想从数据库中获取数据并使用 Cakephp4 中的 Ajax 从控制器发送到视图。

我已经实现了它(很少找到文档),但它没有返回数组。它想要一个完整的视图,但我不想创建一个完整的页面,只需返回数组即可。

错误: The view for CountriesController::getAll() was not found.

在我的src/controller/CountriesController.php

        public function getAll() 


        $results = $this->Countries->find('all', [
                    'contain' => ['PLZ']
                ]);

                $this->set(compact('results')); 
                $this->set('_serialize', 'results'); 
    

在我的template/countries/index.php

$.ajax(
    type: 'get',
    url: 'countries/getAll',
    beforeSend: function(xhr) 
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    ,
    success: function(response) 
        if (response.error) 
            alert(response.error);
            console.log(response.error);
        
        if (response.content) 
            $('#target').html(response.content);
        
    ,
    error: function(e) 
        alert("An error occurred: " + e.responseText.message);
        console.log(e);
    
);

【问题讨论】:

this part of the manual 有帮助吗?也许this question?还是this one? 是的,谢谢你,对不起。我稍后会发布我的解决方案。 【参考方案1】:

试试这样的:

config/routes.php

$routes->prefix('Api', function (RouteBuilder $routes) 
    $routes->setExtensions(['json']);
    $routes->fallbacks(DashedRoute::class);
);

Controller/Api/CountriesController.php

public function getall()

    $countries = $this->Countries->find('all', [
        'contain' => ['PLZ']
    ]);

    $data = [
        'countries' => $countries,
    ];

    $this->set(compact('data'));
    $this->viewBuilder()->setOption('serialize', ['data']);

先看看这是否有效: /api/countries/getall.json

【讨论】:

以上是关于CakePHP4 Ajax:从控制器发送到视图的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax将@Model从视图发送到控制器

如何使用 Ajax 以数组格式将多个图像从 MVC 视图发送到控制器?

我无法在 C# 中使用 Jquery 和 Ajax 从控制器向 Razor 视图发送值

尝试使用 ajax 调用将 urdu 字符串视图发送到控制器,但它在控制时始终为空

在 Laravel 5.1 中通过 AJAX 将用户输入数据从视图传递到控制器

如何通过包含表单数据但不单击提交按钮的 ajax 将视图模型发送到控制器