CakePHP和jQuery – 不引人注目的动作

我正试图在CakePHP中删除书签,这是一个不引人注目的动作。 虽然它工作得很好,但我怀疑必须有更好的方法来做到这一点。 有人可以指出我正确的方向吗?

function delete($id = null) { $ok = $this->Bookmark->delete($id); if($this->RequestHandler->isAjax()) { $this->autoRender = false; $this->autoLayout = false; $response = array('status' => 0, 'message' => 'Could not delete bookmark'); if($ok) { $response = array('status' => 1, 'message' => 'Bookmark deleted'); } $this->header('Content-Type: application/json'); echo json_encode($response); exit(); } // Request isn't AJAX, redirect. $this->redirect(array('action' => 'index')); } 

如果你计划更广泛地使用AJAX动作调用,那么走“过度杀伤”路线可能是值得的,而不是“不优雅”的路线。 以下方法将您的应用程序配置为非常优雅地处理AJAX请求。

在routes.php中,添加:

 Router::parseExtensions('json'); 

app/views/layouts/创建一个新目录json在新目录中创建一个新布局default.ctp

  

app/views/bookmarks/创建一个新目录json在新目录中创建一个新视图delete.ctp

 1, 'message'=>__('Bookmark deleted',true)) : array( 'status'=>0, 'message'=>__('Could not delete bookmark',true)); echo $javascript->object($response); // Converts an array into a JSON object. ?> 

控制器:

 class BookmarksController extends AppController() { var $components = array('RequestHandler'); function beforeFilter() { parent::beforeFilter(); $this->RequestHandler->setContent('json', 'text/x-json'); } function delete( $id ) { $ok = $this->Bookmark->del($id); $this->set( compact($ok)); if (! $this->RequestHandler->isAjax()) $this->redirect(array('action'=>'index'),303,true); } } 

在调用AJAX的页面上,您将AJAX请求从/bookmarks/delete/1234更改为/bookmarks/delete/1234.json

这也使您可以选择使用app/views/bookmarks/delete.ctp视图处理对/bookmarks/delete/1234非AJAX调用。

您希望通过AJAX和JSON处理的任何其他操作,您将在app/views/bookmarks/json/目录中添加视图。