CakePHP 2.1 JsonView

5
我正在使用新的CakePHP 2.1,并希望使用JsonView使我的控制器响应由客户端jQuery创建的AJAX请求。
然而,根据文档,这应该自动完成JsonView。

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

我在我的routes.php文件中添加了这行代码

Router::parseExtensions('json');

而在我的控制器中,我有

$this->RequestHandler->setContent('json', 'application/json' ); 
$bookings = $this->Bookings->find('all');

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

那么视图应该已经过时了,但是当我调用它时,它仍然提供一个指向缺失视图的页面。


请注意,您不需要显式设置 application/json - Álvaro González
3个回答

5
你调用的URL是否以“.json”结尾?

1
这确实有所不同!谢谢。 在支持 SEO 的框架中,需要 .json 文件有点奇怪... - Chris De Rouck
2
没有问题。但这当然是一件好事。因此,您完全知道哪个调用您的页面是ajax调用,哪个不是(例如在awstats或类似工具中)。 为了避免将来遇到这样的问题,请尝试查看cake的核心代码。从请求进入框架直到通过转储变量或反射类进入控制器中的操作,可以向您展示有关框架本身的许多信息。 ;) 但您也可以再次提问;P - func0der

2

我在使用Cake框架时遇到了一些问题,它要求我明确设置json视图。XML视图默认可以正常加载,但是json视图不能。

我在API函数中执行了以下操作:

    if($this->RequestHandler->ext == 'json') {
        $this->autoRender = false;
        echo json_encode($results);
    } else if($this->RequestHandler->ext == 'xml') {
        $this->set(array(
            'results' => $results,
            '_serialize' => array('results')
        ));
    }

0
你是否已将“RequestHandlerComponent”添加到你的控制器组件列表中?
我选择了另一种方式,创建了一个JSON视图: /app/View/Model/json/view.ctp
<?php
echo json_encode(array(
'success' => TRUE
));

在我的控制器中,我使用了:

$this->viewClass = 'Json';

敬礼, 詹姆斯


可能会起作用,但我正在寻找使用JsonView的“简单”解决方案,下面的答案使得一个额外的视图变得不必要... - Chris De Rouck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接