CakePHP 3.5中的JSON响应

CakePHP 3.5中的JSON响应,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我是CakePHP框架的新手。我已经在一个问题上纠缠了一段时间了 我正在尝试使json响应正常工作。我已经阅读了有关如何在此处执行的教程:。然而,这对我来说仍然不起作用 这是我的代码: 在我的控制器内部-App\controller\ExpensesController public function getMonthlyExpenses($month = null) { $expenses = $this->Expenses->find('all'); $th

我是CakePHP框架的新手。我已经在一个问题上纠缠了一段时间了

我正在尝试使json响应正常工作。我已经阅读了有关如何在此处执行的教程:。然而,这对我来说仍然不起作用

这是我的代码:

在我的控制器内部-
App\controller\ExpensesController

public function getMonthlyExpenses($month = null) {

    $expenses = $this->Expenses->find('all'); 

    $this->set(compact($expenses, $month)); 

    $this->set('_serialize', array("expenses", "month"));   

}
我正在视图元素中调用
getMonthlyExpenses
-
/src/Template/Element/Chart/expenseChart.ctp

<script>
    $.ajax({
        url: '/finance/expenses/getMonthlyExpenses/3.json',
        accepts: 'application/json', 
        async: false, 
        success: function(data) {
            console.log("data" + data);
        }, 
     error: function() {
        console.log("there was an error");
    }
});
</script>

$.ajax({
url:“/finance/expenses/getMonthlyExpenses/3.json”,
接受:“application/json”,
async:false,
成功:功能(数据){
控制台日志(“数据”+数据);
}, 
错误:函数(){
log(“有一个错误”);
}
});
在我的配置-`Routes.php'中

<?php

use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;


Router::defaultRouteClass(DashedRoute::class);

Router::scope('/', function (RouteBuilder $routes) {

    $routes->extensions(['json']);
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);


    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);


    $routes->fallbacks(DashedRoute::class);

});


Plugin::routes();

我有一个运行CakePHP 3.5的类似应用程序,这是我的routes文件的一个示例,也许您遗漏了什么。我的略有不同,因为我的RESTAPI位于插件中

Router::plugin('Api', ['path' => '/publisher/], function (RouteBuilder $routes) {
        $routes->extensions(['json']);
        $routes->fallbacks('DashedRoute');
    }
);
尝试将AJAX请求端点从getMonthlyExpenses更改为getMonthlyExpenses或get_monthly_expenses,我相信这就是问题所在

还可以尝试在控制器函数的开始部分简单地执行一个die('helloworld')来进行调试

此外,请尝试其他设置结果的方法:

public function getMonthlyExpenses($month = null) {

    $expenses = $this->Expenses->find('all'); 

    $this->set(compact($expenses, $month)); 

    $this->set('_serialize', true);   

}
尝试更改:

$this->set(compact($expenses, $month));


它似乎接受变量名或name=>variable的数组。

请发布完整的routes.php文件,但是我将尝试回答以下问题。我已经添加了我的整个routes.php文件。您是否尝试了我提到的其他调试步骤?我将ajax url更改为
get monthly expenses
get_monthly_expenses
,但我仍然得到空值。然而,
die(“hello world”)
is在响应中返回“hello world”。用tryYes的新内容更新了答案,修复了它。非常感谢。你引用变量和定义变量的方式很奇怪。是的,有点困惑,同意吗
$this->set(compact("expenses", "month"));