pjaxと呼ばれる jQuery プラグインがあり、それは次のように述べています。
このプラグインは、HTML5 pushState と AJAX を使用して、全ロードなしでページを動的に変更します。pushState がサポートされていない場合、PJAX は完全なページの読み込みを実行し、下位互換性を確保します。
pjax が行うことは、 などの指定されたページ要素をリッスンすること<a>
です。次に、<a href=""></a>
要素が呼び出されると、X-PJAX
ヘッダーまたは指定されたフラグメントのいずれかでターゲット ページがフェッチされます。
例:
<script type="text/javascript">
$(document).pjax('a', '#pjax-container');
</script>
このコードをページ ヘッダーに配置すると、ドキュメント内のすべてのリンクがリッスンされ、新しいページから取得して現在のページで置き換える要素が設定されます。
#pjax-container
(現在のページを#pjax-container
リモートページから置き換えたいことを意味します)
が<a>
呼び出されると、リクエスト ヘッダーを含むリンクが取得され、結果でX-PJAX
のコンテンツが検索されます。#pjax-container
結果が の場合#pjax-container
、現在のページのコンテナは新しい結果に置き換えられます。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jquery.pjax.js"></script>
<script type="text/javascript">
$(document).pjax('a', '#pjax-container');
</script>
</head>
<body>
<h1>My Site</h1>
<div class="container" id="pjax-container">
Go to <a href="/page2">next page</a>.
</div>
</body>
</html>
が応答で見つかった最初の要素でない場合#pjax-container
、PJAX はコンテンツを認識せず、要求されたリンクで全ページの読み込みを実行します。これを修正するには、サーバー バックエンド コードを send のみに設定する必要があります#pjax-container
。
のサーバー側コードの例page2
:
//if header X-PJAX == true in request headers, send
<div class="container" id="pjax-container">
Go to <a href="/page1">next page</a>.
</div>
//else send full page
サーバー側のコードを変更できない場合は、フラグメント オプションが代替手段になります。
$(document).pjax('a', '#pjax-container', {
fragment: '#pjax-container'
});
これfragment
は古い pjax オプションであり、要求された要素の子要素をフェッチするように見えることに注意してください。