Ajax と pushState を組み合わせた技術らしい。
jQuery:2.1.3
pjax(defunkt):1.9.4
とあるページの指定部分を別ページの指定部分を差し替える。
玉突き式。
別ページの URL へ切り替える。
ページの一部だけ差し替えたいときは、レンダリングの手間が削減される。
GitHub:defunkt/jquery-pjax から DL して配置。
falsandtru 版 と呼ばれる別バージョンもあるそうなので
とリネームして配置。
- <script src="jquery.min.js"></script>
- <script src="jquery.pjax.defunkt.js"></script>
- <body>
- <div>pjax before.</div>
- <div id="container">
- <div><button>pjax before.</button></div>
- </div>
- <script type="text/javascript">
- $( document ).ready( function() {
- $( 'button' ).click( function() {
- $.pjax({
- url: 'pjax_test.php';
- container: '#container',
- fragment: '#container_new'
- });
- });
- });
- </script>
- </body>
- <body>
- <div>pjax after.</div>
- <div id="container_new">
- <div>pjax after. Good Job!</div>
- </div>
- </body>
これで試すと、container の外にある
pjax before.
の部分はそのままで、container の中だけ切り替わる。
ところが、1度の差し替えは上述でできたものの、
連続差し替えは上手くいかなかった。
そこで1枚のページで差し替えるタイプにしたら、連続して動作した。
- <body>
- <div id="container">
- <div id="test">
- <button id="hoge_1">pjax</button>
- <button id="hoge_2"><?php echo ( empty( $_GET['value'] ) ) ? 1 : $_GET['value'] + 1; ?></button>
- </div>
- </div>
- <script type="text/javascript">
- $( document ).ready( function() {
- $( 'button' ).click( function() {
- $.pjax({
- url: 'index.php?value=' + $( '#hoge_2' ).text(),
- container: '#container',
- fragment: '#container_new'
- });
- });
- });
- </script>
- </body>
ただし、
- container: '#container',
- fragment: '#container'
ここを同じ名前にすると1回でストップ。連続ならず。
おっかしいなぁ。動いたときもあったんだけどな~。。。
同じページを読み込んでいるんだから
#content は存在しても、#content_new なんて存在しないのにね。
未解決事件。 😯
やっぱり気持ち悪くて後日試したところ
同じ名前の箇所を差し替えるには fragment は、いらないみたい。
- container: '#container',
これでちゃんと動く。
- $(document).on('pjax:send', function(e) {
- $('body').append("<div id='loading'>処理中</div>");
- });
- $(document).on('pjax:complete', function(e,data) {
- $("#loading").remove();
- });
これでローディング画面を表示できることはわかったけど、引数とかは現在理解できていない。
またの機会に!
フォームの値の受け渡し 参照。
ブラウザバックとかの挙動への対処が必要ね~。
RakSul:はじめての「pjax」
Qiita:pushStateとAjaxの組み合わせpjax
→CSS シグネチャ対策やブラウザバック対策のほか、コメントにも対策の話が出ている。
Cubix:defunkt版pjaxの説明