提问者:小点点

避免在CakePHP上为每个AJAX函数创建视图


我试图避免为我在控制器上使用的每个AJAX函数创建一个视图。(因为我不以任何方式操作生成的数据,而且在大多数情况下只是一个布尔值)

我正在控制器上使用RequestHandler组件:

var $components = array('RequestHandler');

我在routes.php中添加了这个

Router::parseExtensions('json');

我试图使此函数正常工作,但我得到了一个null值:

public function test(){
    $this->layout = 'ajax';

    $result = '1';
    $this->set('_serialize', $result);
}

要访问函数的json版本,我在. json中使用此URL整理以避免加载任何视图:

http://localhost/cakephp/demoController/test.json

我一直按照步骤从CakePHP留档:http://book.cakephp.org/2.0/en/views/json-and-xml-views.html#json-and-xml-views

我做错了什么?为什么我没有得到预期的结果,而是得到一个null

另外,如果我尝试序列化某个数组,例如:

$result = array('demo' => '1');
$this->set('_serialize', $result);

我收到这个通知:

注意(8):未定义索引:1[CORE\Cake\View\JsonView.php, line89]Code Context


共3个答案

匿名用户

据我所知,您必须指定一个视图变量,然后在使用\u serialize键时引用该变量。这意味着您的代码片段看起来像:

$result = '1';
$this->set('theResult', $result);
$this->set('_serialize', array('theResult'));

匿名用户

我没有。URL中的json扩展和路由器::parseExtensions('json')我的路线中的行。php文件,所以@dhofset的答案对我不起作用。

我的解决方案是添加renderAs()调用:

public $components = array('RequestHandler');

public function my_ajax_action() {
    // do something
    $result = '1';
    $this->set('result', $result);
    $this->set('_serialize', array('result'));
    $this->RequestHandler->renderAs($this, 'json');
}

匿名用户

您可以创建一个元素并渲染它。

function test() {
    $this->autoRender = false;

    $result = array('demo' => '1');

    $this->set(compact('result'));
    $this->set('_serialize', array('result'));
    $this->render(DS.'Elements'.DS.'element_name');
}

见文件