はい、Googleは特にフラグメント識別子でAJAXアプリケーションの状態を維持し、このテーマにいくつかの良いものを書いた:
// Special handler for ajax partials ("AHAH" paradigm)
if (isset($_GET['_escaped_fragment']))
{
// Grab just the fragment
$fragment = $_GET['_escaped_fragment'];
// See if we have GET parameters to extract from the fragment
if (FALSE !== ($p = strpos($fragment, '?')))
{
// Make sure to save additional GET parameters
$additional_params = array_diff_key($_GET, array('_escaped_fragment' => 1));
// Parse the querty string
parse_str(substr($fragment, $p+1), $_GET);
// Add the originals back in
$_GET = array_merge($_GET, $additional_params);
// The beginning part of the fragment is the base URI
$fragment = substr($fragment, 0, $p);
}
// Otherwise, clear the $_GET array
else
{
$_GET = array();
}
$_SERVER['PATH_INFO'] = $fragment;
$_SERVER['REQUEST_URI'] = $fragment;
// Add a constant for use throughout the app
define('IS_FRAGMENT', 1);
}
defined('IS_FRAGMENT') OR define('IS_FRAGMENT', 0);
:
http://code.google.com/web/ajaxcrawling/docs/specification.html
をここに私はこれを処理するために私のindex.phpファイルに入れていくつかのコードがあります
アプローチはこれです:
1)それはAjaxのリクエストとIS_FRAGMENT == 1だ場合、あなたは、nだけの部分的な結果を表示フロントエンドの変更を埋め込むためにeedしてください
2)それ以外の場合は、検索エンジンまたは直接ページの読み込みであると想定してください。完全に構築されたページを表示します。
必ずしもajax要求のためだけに別々のエンドポイントを作成する必要はありません。 Outputクラスを拡張して、要求された形式の応答を提供するほうがよいでしょう。そういう意味でもっとRESTfulです。
HTML5履歴APIを処理できるブラウザに活用し、他のもののonhashchangeイベントにフォールバックすることをお勧めします。
さらにいくつかのポインタ:
使用 "#!"単に "#"ではなく、AJAXでトリガされるコンテンツの変更を示します。ある時点で、フラグメントが提供するデフォルトのアンカー機能を使用したいかもしれません(しかし、感嘆符は、その特定の文字で始まる要素IDを持たないため、 "安全"です)。
また、絶対URI(#!/ USA/NY/Albany)を使用することをお勧めします。これは、ajaxの部分読み込みメカニズムで一貫性を維持する方が簡単なためです。
さらに、誰かがajaxed-fragmentをURLに再ロードすると、新しいページを読み込むためにwindow.location.href = '...'を実行するだけでなく、かなり面倒になることがあります。その時点でバック/フォワードを使ってあらゆる種類の問題にぶつかります。