Dun*_*zzz 2 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();
}
}
Run Code Online (Sandbox Code Playgroud)
只是抛出一个退出()然后再次,我不需要运行任何视图,我觉得有点麻烦吗?
这是我过去做过的事情:
在config/routes.php,添加以下内容:
Router::mapResources(array('restaurants', 'items'));
Router::parseExtensions('json');
Run Code Online (Sandbox Code Playgroud)
在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');
}
Run Code Online (Sandbox Code Playgroud)
然后在app/views/items和中app/views/restaurants,json每个文件夹下都有一个文件夹,其中包含控制器中每个操作的相应视图文件.请求是使用.json扩展名进行的.
最后,我有一个布局文件,app/views/layouts/json/default.ctp其中包含以下内容:
<?php echo $content_for_layout; ?>
Run Code Online (Sandbox Code Playgroud)
例如,包含以下内容的http://mydomain.com/items/view.json地图app/views/items/json/view.ctp:
<?php echo $javascript->object($item); ?>
Run Code Online (Sandbox Code Playgroud)
$item填充在app/controllers/items_controller.php文件中.
不确定这是否有助于增加混乱,但这就是我在CakePHP应用程序中使用JSON的方式.
更新:添加了布局信息.