对于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/itemsapp/views/restaurants ,我在每个文件夹下都有一个json文件夹,其中包含控制器中每个动作的相应视图文件。 请求使用.json扩展名进行。

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

  

例如, http://mydomain.com/items/view.jsonapp/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