CakePHP 3.5中的JSON响应
我是CakePHP框架的新手。我已经在一个问题上纠缠了一段时间了 我正在尝试使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
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"));