AJAX アクション コールをより広範囲に使用することを計画している場合は、「洗練されていない」ルートではなく、「過剰な」ルートを使用する価値があります。次のメソッドは、AJAX 要求を適切に処理するようにアプリケーションを構成します。
routes.php に以下を追加します。
Router::parseExtensions('json');
に新しいディレクトリを作成し、新しいディレクトリjson
にapp/views/layouts/
新しいレイアウトを作成しますdefault.ctp
。
<?php
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
header('Content-Type: text/x-json');
header("X-JSON: ".$content_for_layout);
echo $content_for_layout;
?>
に新しいディレクトリを作成し、新しいディレクトリjson
にapp/views/bookmarks/
新しいビューを作成しますdelete.ctp
。
<?php
$response = $ok
? array( 'status'=>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
。
これにより、非 AJAX 呼び出しをビューで処理するオプションも利用できるようになり/bookmarks/delete/1234
ますapp/views/bookmarks/delete.ctp
。
app/views/bookmarks/json/
AJAX および JSON を介して処理する必要があるその他のアクションがある場合は、ディレクトリにビューを追加します。