对于CakePHP自动完成,这是一个可接受的Ajax操作吗?
我对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(); } }
只是抛出一个退出()然后再次,我不需要运行任何视图,我觉得有点麻烦吗?
这是我过去做过的事情:
在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
有一个布局文件,其中包含以下内容:
例如, http://mydomain.com/items/view.json
: app/views/items/json/view.ctp
映射到app/views/items/json/view.ctp
,其中包含:
object($item); ?>
$item
填充在app/controllers/items_controller.php
文件中。
不确定这是否有助于增加混乱,但这就是我在CakePHP应用程序中使用JSON的方式。
更新:添加了布局信息。
我使用ajax布局,除了
然后我只创建一个autocomplete.ctp视图,其中我回显了json编码变量。
autocomplete.ctp