Ajax(jQuery)とpushStateのみで実現するSPA用スクリプト

simple-jquery-spa
  • URLをコピーしました!

実際には「pjaxpushState + ajax)」というjQueryプラグインを使っていますが、今回はjQuerypushStateのみでSPAシングルページアプリケーション)を実装します。
以前紹介したCSSフレームワークRatchet」は、まさに今回の応用です。

目次

JavaScriptライブラリを使わない理由

SPAと言えば、AngularReactの他、個人的に今後使いたいと思っているVueなどのJavaScriptライブラリがたくさんありますが、私のような面倒臭がりには大きな問題があります。

例えば、新しく覚えなければならないことが増えたり、フロントだけでなくサーバー側の処理やレスポンスを変えるなど、今まで作ったものを変更したりするのは真っ平ゴメンです!

今回紹介する方法を使えば、既存のWEBアプリに導入するだけで、SPAに変えることができます。

GitHub
GitHub - defunkt/jquery-pjax: pushState + ajax = pjax pushState + ajax = pjax. Contribute to defunkt/jquery-pjax development by creating an account on GitHub.

Ajaxでビューを返して抜き出す

以下の方法なら、いつものHTMLCSSJavaScript(Ajax)のみで、サーバー側も今まで通り普通にビューを返すだけです。

Ajax + pushState の解説

初期設定

まずは、コンテンツを差し替えたい場所の要素を設定します。

次に、historyまたはpushStateが使えるブラウザかどうか判定します。
もし使えなければ、普通のWEBサイトとして表示します。

画面遷移のイベント

次に、リンクアンカー)をクリックした時の処理(GET)と、フォームをサブミットした時の処理(POST)を書きます。

このイベントは、クリックまたはサブミットした際に遷移先のURLが「#」から始まらない、もしくはclassに「ignore」が存在しない場合に発生します。
イベントが発生したら、そのままページ遷移させないように、

でイベントを一旦止め、

遷移先のURLやタイトルを取得し、ブラウザのURLを書き換えて履歴history.pushState)に登録。
最後に、GETの場合は、

そして、POSTの場合は、

関数を呼び出します。

GET/POST処理

関数内では、Ajax$.get()$.post()メソッドを呼び出しています。
応答が帰ってきたら、

を呼び出し、エラーの場合は、

を呼び出します。

コンテンツを読み込む

受っとったHTMLデータから、タイトルコンテンツを取り出して、

JavaScriptHTMLを差し替えます。

以上です。

ページを遷移する際にフェードインフェードアウトを使うともっとアプリらしく見えますね!
あと、アンカーに[target=”_blank”]があった場合も除外した方がいいかも。
まあ、参考サイトのように16行とはなりませんが、GETだけでなくPOSTにも対応した上、かなり軽量だと思います。

一応、GitHubに上げてますので、よかったらどうぞ。

GitHub
GitHub - minoryorg/spa.js: jQuery Plugin for SPA(Single Page Application) jQuery Plugin for SPA(Single Page Application). Contribute to minoryorg/spa.js development by creating an account on GitHub.
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次