CakePHP 2.1 JsonView

CakePHP 2.1 JsonView,php,ajax,json,cakephp,cakephp-2.1,Php,Ajax,Json,Cakephp,Cakephp 2.1,我正在使用新的CakePHP2.1,并希望使用JsonView使我的控制器响应客户端jQuery创建的AJAX请求 但是,根据文档,这应该通过JsonView自动完成 我在routes.php文件中添加了这一行 Router::parseExtensions('json'); 在我的控制器里我有 $this->RequestHandler->setContent('json', 'application/json' ); $bookings = $this->Bookin

我正在使用新的CakePHP2.1,并希望使用JsonView使我的控制器响应客户端jQuery创建的AJAX请求

但是,根据文档,这应该通过JsonView自动完成

我在routes.php文件中添加了这一行

Router::parseExtensions('json');
在我的控制器里我有

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

$this->set('bookings', $bookings);  
$this->set('_serialize', 'bookings');
那么视图应该是过时的,但是当我调用它时,它仍然提供一个指向丢失视图的页面。

您是否已将“RequestHandlerComponent”添加到控制器的组件列表中

我走了另一条路,创建了一个JSON视图: /app/View/Model/json/View.ctp

<?php
echo json_encode(array(
'success' => TRUE
));
问候,,
James

您正在调用的url是否以“.json”结尾?

我遇到一些问题,希望我显式设置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')
        ));
    }

这真的很重要!谢谢有点奇怪,在一个支持为seo重写url的框架中需要.json来实现这一点……没问题。但这当然是件好事。因此,您完全知道对页面的调用是ajax调用,而不是ajax调用(例如,在awstats或类似工具中)。为了避免将来遇到此类问题,请尝试查看cake的核心代码。从进入框架到通过转储变量或反射类进入控制器中的操作的请求之后,向您展示了很多关于框架本身的信息。;)但你也可以再问一次;PMight可以工作,但我正在用JsonView搜索“简单”的解决方案,下面的答案使额外的视图过时了……请注意,您不需要显式地设置
application/json
    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')
        ));
    }