这是CakePHP自动完成的可接受的Ajax操作吗?
问题描述:
我对CakePHP比较新,想知道用户如何构造他们的ajax方法。代码的目的是为jQuery自动完成创建一个匹配产品的JSON列表。这是CakePHP自动完成的可接受的Ajax操作吗?
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();
}
}
感觉有点胆量,只是抛出一个出口(),但话又说回来,我不需要运行任何意见做我肯定?
答
这是我在过去所做的那样:
在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/items
和app/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
文件。
不知道这有助于为增加了混乱,但这就是我用JSON在我的CakePHP应用程序。
UPDATE:新增布局信息。
答
我用什么也没有一个Ajax布局除了
<?php echo $content_for_layout ?>
然后我让我在其中回声JSON编码变量的autocomplete.ctp图。
autocomplete.ctp
<?php echo json_encode($products); ?>
没错那也没关系,我做同样的方式。 – Sergei 2011-02-12 01:12:08
没有它也不行,因为这是“观看”代码的“控制器”,MVC 101 – dogmatic69 2011-02-12 01:21:53