検索
ホームページウェブフロントエンドjsチュートリアルYii 統合 pjax (pushstate+ajax) を使用して、更新せずにページをロードします

この記事では、Yii が pjax (pushstate+ajax) を統合して、更新せずにページをロードする方法を紹介します。一緒に学びましょう

Pjax とは?

Pjax = history.pushState + Ajax
   = history.pushState + Async JS + XML(xhr?)

BOM オブジェクトの履歴が強化され、主に履歴スタックに対する操作が行われました。以前は、ページ全体をジャンプして更新するものしかありませんでした。現在は、pushState が追加されています。 、replaceState など。履歴スタックを単純に操作する方法は、履歴スタック内のコンテンツを変更するだけであり、副作用はありません (ページがジャンプしたり更新されたりしません)

PJAX 効果

動的に読み込まれるコンテンツajax は URL を通じて追跡できます。この手法は、2 ステップのビュー レイアウトを持つビューで特に有益です。更新せずにページをロードすることは、静的スクリプトや共通モジュールが多数ある場合に、応答速度とユーザー エクスペリエンスが大幅に向上することを意味し、再利用のコストが最大限に節約されます。アプリケーションの例では、現在の Google+、Facebook、および Weibo の新バージョンを参照できます。これらも HTML5 PushState に基づいて実装されています。 Google Plus のパフォーマンスは最も顕著です。ナビゲーション バーのアドレスをクリックすると、矢印がターゲットに合わせて移動し、同時に読み込まれたページがフェードインします。

ダーティ URL とクリーン URL

pjax が登場する前は、更新せずにページをロードし、URL を通じて追跡するには、ブラウザーが window.location.hash 属性をサポートする必要がありました。具体的な構築方法は、url#アンカー以降に記録されたアドレスを判断して、ハッシュ変更監視関数を記述し、ハッシュ変更がトリガーされた場合にロードする内容を判断します。欠点は、ie6 などの下位バージョンのブラウザーがハッシュをサポートしていないことと、前方および後方を実現するために履歴 URL を記録するために追加の iframe を構築する必要があることです。最大の問題は、# の後に生成されたコンテンツが検索エンジンによってインデックスに登録されないことです。Google は以前、#! を使用してアドレスを ?escape_fragment=url に誘導するという解決策を提供しました。私は twitter や facebook を使用しています。 , Renren、Sina Weibo、そして閉鎖されたDoubanの誰もが、このハッシュバンが使用されているか、使用されているのを見たことがあるでしょう。合格#! URL を更新せずに読み込むことを実現する一般的な方法は、検索エンジン (国内の Baidu など) に含まれにくいため、比較的ダーティな URL と呼ばれますが、pjax ではクリーンな URL を使用して同様の効果を得ることができます。さまざまなブラウザとの互換性が高く、現在はブラウザが最適な方法です

PHP+jQueryを使用してPJAXを実装

jQueryはすでにオープンソース化されているため、pushStateベースのJavaScriptプラグインを最初から作成する必要はありません。そしてそれは簡単に実装できます。現在、開発中のプロジェクトにそれを導入しましたが、元のプロジェクトと非常に互換性があり、もちろん、新しいバージョンの Weibo がどのようになるかを視聴者に理解してもらいたいと思っています。使用すると、次のようになります

開始前の準備:

1. jQuery ライブラリ

2. jQ ベースの pjax プラグイン (github のオープンソース プロジェクト) /github.com/defunkt/jquery-pjax

3. PHP プロジェクトのコード (共有しやすいように、この記事ではデモに yii フレームワークを使用しています。実際の開発は同様です)

1. フロントエンドの実装

使い方は非常に簡単で、jquery-pjax プラグインは適切にパッケージ化されており、好みに応じて確実にカスタマイズできます (たとえば、g plus の効果をコピーするなど)。以下は、上記を統合した基本的な HTML サンプル コードです。手順:

<?php
Yii::app()->clientScript->registerCoreScript(&#39;jquery&#39;);
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . &#39;/js/jquery-pjax/jquery.pjax.js&#39;);//具体以你存放pjax的实际位置为准
?>
<p id="nav">
  <a href="<?php echo Yii::app()->createUrl(&#39;article/index&#39;);?>">article</a>
</p>
<p id="main">替换的内容</p>
<script type="text/javascript">
  $(document).ready(function(){
    $("#main").pjax("a");
  });
</script>

最終的な目標は、a タグをクリックすることです。ajax を通じて返された結果は、main の ID を持つ p に格納されます。テキストは対応するアドレスの内容に置き換えられ、URL は自動的に更新されます。ページはリロードされません。バックエンドで処理するコンテンツの実装を始めましょう

2. PHP側の実装

PHP側で行うべき作業は主に2つです。 1. レイアウトビューのレイアウトの実装 2. リクエストの判断pjax から来ています

Yii フレームワークでの実装:

コントローラーで次のアクションの処理を行います (例として Article のインデックスを取り上げます):

public function actionIndex() {
  $this->layout = &#39;//layouts/column1&#39;;
  $dataProvider = new CActiveDataProvider(&#39;Article&#39;, array(
    &#39;criteria&#39; => array(&#39;order&#39; => &#39;create_time DESC&#39;)
  ));
  if (array_key_exists(&#39;HTTP_X_PJAX&#39;, $_SERVER) && $_SERVER[&#39;HTTP_X_PJAX&#39;]) {
    $this->renderPartial(&#39;index&#39;, array(
       &#39;dataProvider&#39; => $dataProvider,
    ));
  } else {
    $this->render(&#39;index&#39;, array(
      &#39;dataProvider&#39; => $dataProvider,
    ));
  }
}

効果のデモ画像:

記事リンクまたは記事リンクをクリックすると、次のエフェクトページが表示されます:

----------------------------- ------------

jquery-pjax 使用時の注意事項:

1. 返されるテンプレートのコンテンツは、HTML タグで囲む必要があります

2.プラグインの使用については、github プロジェクトの説明を参照してください。アップデート後は使用方法が異なる場合があります

3. Pushstate をサポートしていない低バージョンのブラウザの場合、pjax プラグインが自動的に判断して使用します。従来のページ読み込みモード

4. ページの pjax リクエスト時間が設定時間を超えると、読み込みにリフレッシュが使用されるため、プラグイン

の関連パラメーターはすべて私がコンパイルする必要があります。今後もお役に立てば幸いです。

関連記事:

Jqueryとphpを組み合わせてAJAXロングポーリングを実装

ロード時のjs ajaxプログレスバーコード

JavaScript、Ajax、jQueryの予備理解、および3つの関係の比較

以上がYii 統合 pjax (pushstate+ajax) を使用して、更新せずにページをロードしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

node.jsは、型を使用してストリーミングしますnode.jsは、型を使用してストリーミングしますApr 30, 2025 am 08:22 AM

node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

Python vs. JavaScript:パフォーマンスと効率の考慮事項Python vs. JavaScript:パフォーマンスと効率の考慮事項Apr 30, 2025 am 12:08 AM

PythonとJavaScriptのパフォーマンスと効率の違いは、主に以下に反映されています。1)解釈された言語として、Pythonはゆっくりと実行されますが、開発効率が高く、迅速なプロトタイプ開発に適しています。 2)JavaScriptはブラウザ内の単一のスレッドに限定されていますが、マルチスレッドおよび非同期I/Oを使用してnode.jsのパフォーマンスを改善でき、両方とも実際のプロジェクトで利点があります。

JavaScriptの起源:その実装言語の調査JavaScriptの起源:その実装言語の調査Apr 29, 2025 am 12:51 AM

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい