对于CakePHP自动完成,这是一个可接受的Ajax操作吗?

时间:2011-02-11 23:47:59

标签: jquery cakephp autocomplete

我对CakePHP比较陌生,并且想知道高级用户如何构建他们的ajax方法。代码的目的是为jQuery自动完成创建匹配产品的JSON列表。

 function autocomplete() {
            $terms = $this->params['url']['q'];
            if (!$this->RequestHandler->isAjax()) {
                $products = $this->Product->find('list', array(
                    'conditions' => array(
                        'Product.name LIKE' => '%'.$terms.'%',
                    ),
                    'limit' => 7,
                    'order' => 'Product.name',
                    'contain' => false
                ));
                exit(json_encode($products));
            } else {
                $this->redirect();
            }
        }

只是抛出一个退出()然后又一次,我不需要运行任何观点,我觉得有点麻痹吗?

2 个答案:

答案 0 :(得分:5)

以下是我过去所做的事情:

config/routes.php中,添加以下内容:

Router::mapResources(array('restaurants', 'items'));
Router::parseExtensions('json');

app/app_controller.php

function beforeFilter() {
    if ($this->isApiCall()) {
        Configure::write('debug', 0);
    }
}

function isApiCall() {
    return $this->RequestHandler->isAjax()
        || $this->RequestHandler->isXml()
        || $this->RequestHandler->prefers('json');
}

然后在app/views/itemsapp/views/restaurants中,每个文件夹下都有一个json文件夹,其中包含控制器中每个操作的相应视图文件。请求使用.json扩展名。

最后,我在app/views/layouts/json/default.ctp中有一个布局文件,其中包含以下内容:

<?php echo $content_for_layout; ?>

例如,http://mydomain.com/items/view.json映射到app/views/items/json/view.ctp,其中包含:

<?php echo $javascript->object($item); ?>

$item填充在app/controllers/items_controller.php文件中。

不确定这是否有助于增加混乱,但这就是我在CakePHP应用程序中使用JSON的方式。

更新:添加了布局信息。

答案 1 :(得分:0)

我使用ajax布局,除了

之外没有任何内容
<?php echo $content_for_layout ?>

然后我只创建一个autocomplete.ctp视图,其中我回显了json编码变量。

autocomplete.ctp

<?php echo json_encode($products); ?>