1つの記事でJSONPの原理と応用を理解する

1つの記事でJSONPの原理と応用を理解する

JSONPとは

まず、JSON の概念について説明します。JSON は、現在の Web アプリケーションで広く使用されている軽量のデータ転送形式です。 JSON 形式のデータのエンコードと解析は基本的にすべての主流言語で実装されているため、フロントエンドとバックエンドが分離されたアーキテクチャのほとんどは現在、JSON 形式でデータを送信しています。

ではJSONPとは何でしょうか?

まず、ブラウザ相同性ポリシーの概念について説明します。ユーザーアクセスのセキュリティを確保するために、最新のブラウザは相同性ポリシーを使用しており、相同性のないソースからのページへのアクセスは許可されません。詳細な概念については、Baiduで検索できます。ここで誰もが知っておく必要があるのは、Ajax では、同じオリジンではない URL へのリクエストは許可されないということです。たとえば、www.a.com の下のページでは、Ajax リクエストは www.b.com/c.php のようなページにアクセスできません。

JSONP はクロスドメインリクエストの問題を解決するために使用されますが、具体的にはどのように実装されるのでしょうか?

JSONP 原則

Ajax リクエストは同一オリジン ポリシーの影響を受け、クロスドメイン リクエストは許可されません。ただし、script タグの src 属性のリンクは、クロスドメイン js スクリプトにアクセスできます。この機能を使用すると、サーバーは JSON 形式でデータを返すのではなく、src で呼び出される関数を呼び出す js コードのセクションを返すため、クロスドメインが実現します。

JSONP実装

1. Ajaxでクロスドメインリクエストが行われると何が起こるか

フロントエンドコードはドメインwww.practice.comの下にあり、クロスドメインのgetリクエストを送信するためにajaxを使用しています。

<!DOCTYPE html>
<html>
<ヘッド>
	<title>GoJSONP</title>
</head>
<本文>
<script type="text/javascript">
	関数jsonhandle(データ){
		アラート("年齢:" + data.age + "名前:" + data.name);
	}
</スクリプト>
<script type="text/javascript" src="jquery-1.8.3.min.js">
</スクリプト>
<script type="text/javascript">
	$(ドキュメント).ready(関数(){
		$.ajax({
			タイプ: "get",
			非同期: false、
			URL: "http://www.practice-zhao.com/student.php?id=1",
			タイプ: "json",
			成功: 関数(データ) {
				jsonhandle(データ);
			}

		});
	});
</スクリプト>
</本文>
</html>

バックエンドのPHPコードはドメインwww.practice-zhao.comの下に配置され、json形式でデータを出力するだけです。

jsonハンドル({

「年齢」: 15,

"名前": "ジョン",

フロントエンドコード http://www.practice.com/gojsonp/index.html にアクセスすると、Chrome は次のエラーを報告します。

異なるソースからのURLへのアクセスを禁止することをお勧めします

2. JSONPを使用してフロントエンドコード内のAjaxリクエストを削除する

スクリプト タグを追加しました。その src は、別のドメイン www.practice-zhao.com の remote.js スクリプトを指します。

<!DOCTYPE html>
<html>
<ヘッド>
	<title>GoJSONP</title>
</head>
<本文>
<script type="text/javascript">
	関数jsonhandle(データ){
		アラート("年齢:" + data.age + "名前:" + data.name);
	}
</スクリプト>
<script type="text/javascript" src="jquery-1.8.3.min.js">
</スクリプト>
<script type="text/javascript" src="http://www.practice-zhao.com/remote.js"></script>
</本文>
</html>

ここで、クロスドメインの remote.js スクリプトが呼び出されます。remote.js コードは次のとおりです。

jsonハンドル({
	「年齢」: 15,
	"名前": "ジョン",
})

つまり、このリモートjsコードは上で定義された関数を実行し、プロンプトボックスをポップアップします。

3. フロントエンドコードを再度修正する

コードは次のとおりです。

<!DOCTYPE html>
<html>
<ヘッド>
	<title>GoJSONP</title>
</head>
<本文>
<script type="text/javascript">
	関数jsonhandle(データ){
		アラート("年齢:" + data.age + "名前:" + data.name);
	}
</スクリプト>
<script type="text/javascript" src="jquery-1.8.3.min.js">
</スクリプト>
<script type="text/javascript">
	$(ドキュメント).ready(関数(){
		var url = "http://www.practice-zhao.com/student.php?id=1&callback=jsonhandle";
		var obj = $('<script><\/script>');
		obj.attr("src",url);
		$("body").append(obj);
	});
</スクリプト>
</本文>
</html>

ここでスクリプト タグが動的に追加され、src はクロスドメイン PHP スクリプトを指し、上記の JS 関数名がコールバック パラメーターとして渡されます。次に、PHP コードがどのように記述されるかを見てみましょう。

<?php
$データ = 配列(
	'年齢' => 20,
	'名前' => '張三'、
);

$コールバック = $_GET['コールバック'];

$callback をエコーし​​ます。"(".json_encode($data).")";
戻る;

PHPコードはJSステートメントを返します。

jsonハンドル({
	「年齢」: 15,
	"名前": "張三",
})

この時点でページにアクセスすると、スクリプト タグが動的に追加され、src が PHP スクリプトを指し、返された JS コードが実行され、プロンプト ボックスが正常にポップアップ表示されます。
したがって、JSONP はクロスドメイン リクエストへのアクセスをリモート JS コードの実行に変換します。サーバーは JSON 形式でデータを返すのではなく、JSON データを受信パラメータとして受け取る関数実行コードを返します。

4. 最後に、jQueryはJSONPを使用する便利な方法を提供します

コードは次のとおりです。

<!DOCTYPE html>
<html>
<ヘッド>
	<title>GoJSONP</title>
</head>
<本文>
<script type="text/javascript" src="jquery-1.8.3.min.js">
</スクリプト>
<script type="text/javascript">
	$(ドキュメント).ready(関数(){
		$.ajax({
			タイプ: "get",
			非同期: false、
			URL: "http://www.practice-zhao.com/student.php?id=1",
			データ型: "jsonp",
			jsonp:"callback", //リクエストのパラメータ名 PHP jsonpCallback: "jsonhandle", //実行されるコールバック関数 success : function(data) {
				アラート("年齢:" + data.age + "名前:" + data.name);
			}

		});
	});
</スクリプト>
</本文>
</html>

上記は、JSONP の原理と応用を 1 つの記事で理解するための詳細な内容です。JSONP の原理と応用の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JSONP の原則、理解、例の分析
  • Jsonp クロスドメイン ソリューションの原理の分析
  • JSONPの原則と応用例の詳細な説明
  • JSONPの原則とシンプルな実装
  • jsonpプロトコルの原理の詳細な分析
  • JSONPクロスドメインの原理の詳細な分析
  • JSONP クロスドメイン原理分析と実装の紹介
  • JSONPの原理と使用法
  • スクリプトを使用して HTTP クロスドメイン リクエストを行う: JSONP 実装の原則とコード
  • js/ajax クロスアクセス jsonp の原理と例 (javascript および jquery 実装コード)

<<:  Dockerコンテナのログ分析

>>:  分散ロックの原理と3つの実装方法の詳細な説明

推薦する

Docker に Kong ゲートウェイをインストールする方法の例

1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...

Vueのコンポーネントのprops属性について詳しく説明します

目次質問1: 小道具は具体的にどのように使用されますか?原理は何ですか?下を見る質問 2: 年齢に ...

MySQLでカーソルトリガーを使用する方法

カーソル選択クエリによって返される行のセットは、結果セットと呼ばれます。結果セット内の行は、入力した...

503 サービス利用不可エラーの解決方法の説明

1. Webページを開くと503サービス利用不可が表示されますが、更新すると正常にアクセスできます。...

HTML ページ内の js および css ファイルのキャッシュを自動的にクリーンアップします (バージョン番号を自動的に追加します)

Web プロジェクトの開発プロセスでは、CSS ファイルや JS ファイルを参照することがよくあり...

CentOS 7 に mysql5.7 の解凍バージョンをインストールするチュートリアル

1. mysqlの圧縮パッケージを/usr/localフォルダに解凍し、名前をmysqlに変更します...

カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る

カーソルカーソルは、結果セット内のデータを表示または処理するために使用される方法です。カーソルを使用...

初心者向けMySQLシリーズチュートリアル

目次1. 基本概念と基本コマンド1) 基本的な概念2) 基本コマンド2. SQL文の記述順序と実行順...

Linuxにpipパッケージをインストールする方法

1. システムの Python バージョンに応じて、pip インストール パッケージをダウンロードし...

MYSQLでリモートアクセス権限を有効にする方法

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

数百万のデータに対して MySQL クエリを最適化する 4 つの方法

目次1. 時間が経つにつれて限界が遅くなる理由2. 百万データシミュレーション1. 従業員テーブルと...

JSX を使用してコンポーネント パーサー開発を構築する例

目次JSX環境の構築プロジェクトの設定NPMを初期化するwebpackをインストールするBabelを...

トップに戻るボタンを実装するJavaScript

この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...

MacOS Catalina アップグレード後の VMware ブラック スクリーン問題に対する完璧な解決策の詳細な説明

MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...

MySQL REVOKE でユーザー権限を削除する

MySQL では、REVOKE ステートメントを使用してユーザーの特定の権限を削除できます (ユーザ...