Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将视图渲染为字符串,然后在cakephp中输出json

将视图渲染为字符串,然后在cakephp中输出json
EN

Stack Overflow用户
提问于 2014-05-05 08:06:40
回答 3查看 11.9K关注 0票数 10

我在使用AJAX和CakePHP时遇到了一些JSON2.4的问题。

我希望使用视图呈现数据,但将生成的html保存为变量中的字符串。之后,我想设置一个数组,其中包含此html字符串和其他要作为JSON对象返回的数据。不幸的是,我还没有找到正确的方法。

到目前为止,我的控制器代码使用了CakePHP json的魔力:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Controller (just parts) 

$data = $this->paginate();

if($this->request->is('ajax')) {

        $jsonResponse = array(

            'jobs' => $data,

            'foci' => $foci,

            'jobTypes' => $jobTypes,

            'count_number'=> $count_number

        );

        $this->set('jsonResponse', $jsonResponse);

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

    } else {

        // render regular view
        $this->set(compact('data', 'foci', 'jobTypes', 'count_number'));

    }

这在javascript控制台中输出了完美的json,除此之外,$data中的数据是纯数据。

有没有可能将$data传递给视图,呈现它,将输出保存到字符串变量$html,并将$html传递给jsonResponse中的作业,而不是$data?

EN

回答 3

Stack Overflow用户

发布于 2014-05-05 10:47:58

是!您可以将视图呈现为变量。你只需要创建一个视图对象。在你的控制器中,试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$view = new View($this,false);
$view->viewPath='Elements';  // Directory inside view directory to search for .ctp files
$view->layout=false; // if you want to disable layout
$view->set ('variable_name','variable_value'); // set your variables for view here
$html=$view->render('view_name'); 

// then use this $html for json response
票数 25
EN

Stack Overflow用户

发布于 2015-07-23 11:02:14

对于使用CakePhp3的用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$view = new View($this->request,$this->response,null);
$view->viewPath='MyPath';  // Directory inside view directory to search for .ctp files
$view->layout='ajax'; // layout to use or false to disable
$html=$view->render('view_name');

不要忘记将其添加到您的名称空间中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use Cake\View\View;
票数 14
EN

Stack Overflow用户

发布于 2015-01-07 09:06:06

Controller::render()函数实际上通过调用CakeResponse::body()然后返回当前的CakeResponse对象来设置响应的主体。这意味着您可以在控制器操作中调用render()方法,捕获其返回值,然后再次调用CakeResponse::body(),从而将响应体替换为所需的输出。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = $this->paginate();

// Pass the data that needs to be used in the view
$this->set(compact('data', 'foci', 'jobTypes', 'count_number'));

if($this->request->is('ajax')) {

    // Disable the layout and change the view 
    // so that only the desired html is rendered
    $this->layout = false;
    $this->view = 'VIEW_PASSED_AS_JSON_STRING';

    // Call the render() method returns the current CakeResponse object
    $response = $this->render();

    // Add any other data that needs to be returned in the response
    // along with the generated html
    $jsonResponse = array(
        'html'       => $response->body(),
        'other_data' => array('foo' => 'bar'),
        'bar'        => 'foo'
    );

    // Replace the response body with the json encoded data
    $response->body(json_encode($jsonResponse));

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23467734

复制
相关文章
MySQL时区问题_docker设置时区
使用mysql-connector-java-8.0.9-rc出现以下异常:
全栈程序员站长
2022/11/17
3.5K0
MySQL时区问题_docker设置时区
mysql时区设置_oracle数据库时区设置
> select curtime(); #或 select now()也可以
全栈程序员站长
2022/11/04
6.2K0
jenkins 时区设置
背景 直接搭建好jenkins没有留意时间这块,执行job的时候发现,执行时间和服务器时间不对,需要设置时区 步骤 找到jenkins的启动配置,centos在: /etc/sysconfig/jenkins 修改如下: JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai" 然后重启jenkins即可 Tips 可参考这个地方:https://wik
千往
2018/01/24
3.4K0
springboot设置时区不起作用_docker设置时区
此时数据库时区、容器时区、springboot时区都是CST,输出的时间还是可能差8小时,这因为Date进行json的时候还存一个时区,而springboot默认json工具是jackson,采用的是UTC时区。需要一下配置。注意:如果项目WebMvcConfig采用的是继承WebMvcConfigurationSupport,而不是实现WebMvcConfigurer接口的话,下面的配置会不生效。
全栈程序员站长
2022/11/09
2.7K0
springboot设置时区不起作用_docker设置时区
Linux下设置时区方法,实现开机自动设置时区
平台: RK3399 系统: ubuntu 18.04 64位 --ARM版本 使用tzselect 命令设置时区。 步骤示例: pi@NanoPC-T4:~$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 2) Americas 3) Antarctica
DS小龙哥
2022/01/12
5.9K0
Linux下设置时区方法,实现开机自动设置时区
Gmail 设置,时区
  我们工作的时候,需要和不同时区的人进行合作。我们需要注意时区问题。如果没有设置好时区,会造成很多不便。
西湖醋鱼
2020/12/30
2K0
Gmail 设置,时区
Postgresql设置时区
查看时区 show time zone 查看时间 select now(); 查看支持的时区列表 select * from pg_timezone_names; 设置成东八区 北京时间 UTC+8 set time zone 'PRC'
geekfly
2022/04/24
1.9K0
MySQL:设置时区
在开发过程中,设置 IDEA 连接数据mysql数据库连接时遇到异常“Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.” 。意思是时区设置的不对。 于是寻找解决方法。
张云飞Vir
2021/06/11
11.1K0
MySQL:设置时区
PHP 时区设置
有时候使用date("Y-m-d h:i:s")时发现时间相差8小时,修改“/etc/php5/apache2/php.ini”:
爱知汇
2020/10/10
2.5K0
Springboot 设置时区问题
本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
Alone88
2020/06/11
6.3K3
MySQL数据库时区错误,设置时区
解决方法1: 打开cmd,输入 mysql -uroot -p123456 进入mysql命令模式 然后输入 set global time_zone=‘+8:00’;
啦啦啦啦
2023/02/11
5.7K0
MySQL数据库时区错误,设置时区
Ubuntu设置时区时间
       我们可以通过date来查看当前的时间时区等信息,如果不是CST时区那么可能就和当前的时间不符,我们可以通过下面的命令来设置时区:
Ch_Zaqdt
2020/03/23
2.2K0
jvm linux 时区设置
在接入集团一个平台的时候,发现录制某个接口到测试环境回放,发现接口入参一致,一个start_day 一个end_day,但回放的时候会多调用一次数据库查询,很是奇怪;
千往
2018/08/02
8.3K0
centos在设置时区
[root@localhost ~]# date -R // 查看时区
全栈程序员站长
2022/07/06
1.3K0
Django 时间与时区设置
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的, 分别是TIME_ZONE和USE_TZ
用户5760343
2022/05/14
1.2K0
Linux 时间及时区设置
UTC(Universal Time Coordinated)=GMT(Greenwich Mean Time),Local time 本地时间,
授客
2019/09/12
10.2K0
设置时区定位可以关闭吗_监控时区设置是什么意思
这个时区要设置好,不然会出现时差, 如果你设置serverTimezone=UTC,连接不报错, 但是我们在用java代码插入到数据库时间的时候却出现了问题。 比如在java代码里面插入的时间为:2021-06-24 17:29:56 但是在数据库里面显示的时间却为:2021-06-24 09:29:56 有了8个小时的时差 UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。
全栈程序员站长
2022/11/09
1.1K0
Django的时区设置问题
  django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题。之前程序在测试时是运行在Windows环境,所以即使settings.py中的TIME_ZONE使用默认时区,Django也会根据本机的时区使用当前时区时间。然而程序放到linux运行程序时,Django的时区会使用settings.py中的TIME_ZONE设置的时区,所以这时就出现了问题。再有当我用脚本在linux上测试或者直接进入python环境的时候,运行time.localtime(),显示本机所在时区的当前时间。
py3study
2020/01/20
2.9K0
mysql jdbc url设置时区
设置时区时,添加serverTimezone参数,比如serverTimezone=GMT%2B8(URL 中 %2B表示+号,GMT%2B8即为GMT+8)。
全栈程序员站长
2022/09/09
6.4K0
点击加载更多

相似问题

码头港口80:80 127.0.0.1

42

港口:80和:443

22

80港口码头码头分店

12

Django项目在80港口?

32

Rails项目位于8080港口,nginx位于80港口

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文