1. JSONPとは何か
コールバック({"name": "王欢"}); SONP は、コールバック関数とデータの 2 つの部分で構成されます。コールバック関数は、応答が来たときにページ内で呼び出される関数です。コールバック関数の名前は通常、リクエストで指定されます。データはコールバック関数に渡される JSON データです。以下は典型的な JSONP リクエストです。 https://freegeoip.net/json/?callback=handleResponse この URL は 2. JSONPクロスドメインリクエスト同一生成元ポリシーはブラウザのセキュリティ メカニズムであることはご存じのとおりです。いわゆるソースとは、プロトコル、ドメイン名、ポート番号を指します。スクリプトの実行中、ブラウザは実行するスクリプトと取得するデータが HTML ページと同じかどうかを検出します。同じであれば、それらは同じ生成元であり、リクエストは成功します。ソースが異なる場合は、クロスドメイン リクエストです。デフォルトでは、ブラウザはクロスドメイン リクエストをサポートしていません。では、クロスドメイン リクエストを行う場合はどうすればよいでしょうか? <スクリプト> 関数 getData(データ){ コンソールにログ出力します。 } var スクリプト = document.createElement('script'); スクリプトID = 'jsonp'; スクリプトをロードします。 document.body.appendChild(スクリプト); </スクリプト> フロントエンドがバックエンドに関数名を伝えていると仮定すると、バックエンドは 取得データ({ 名前: 'シャオ・ワン'、 年齢: 20 }) 実行結果は次のとおりです。 渡したデータである 検索ボックスに「b」と入力すると、リクエストは次のようになります。 要求されたキーワードは次のとおりです。 ここでの https://www.baidu.com/sugrec?pre=1&wd=b&req=2&csor=1&cb=getData(); アドレスバーに次のように入力してテストします: このコールバック関数が設定したものになることがわかります。 3. Baidu検索をシミュレートするこのインターフェースを使用して JSON を生成し、Baidu 検索ページをシミュレートできるようになりました。 コードは次のとおりです。 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>ドキュメント</title> <スタイル> div { 位置: 相対的; 幅: 600ピクセル; 高さ: 40px; } 入力{ 幅: 500ピクセル; 高さ: 40px; 境界線: 2px 実線 #4E6EF2; } ボタン{ 位置: 絶対; 左: 411ピクセル; 上: 0; 幅: 95px; 高さ: 44px; 背景色: #4E6EF2; 境界線: なし; フォントサイズ: 18px; 色: 白; } ul{ 位置: 相対的; 左: -40px; 上: -10px; 幅: 411ピクセル; 高さ: 400px; } li{ 高さ: 40px; 幅: 411ピクセル; 行の高さ: 40px; フォントサイズ: 16px; リストスタイル: なし; } </スタイル> </head> <本文> <div> <input type="text" 値 =''> <button>Baiduで検索</button> </div> <ul></ul> <script src="jquery.js"></script> <スクリプト> // 関数 getData(データ){ var スクリプト = document.querySelector('#jsonp'); スクリプトの親ノードを削除します。 $('ul').html(''); for(var i =0;i<data.g.length;i++){ $('<li>'+data.g[i].q +'</li>').appendTo('ul'); } } //スクリプトを動的に生成する function getList(wd){ var スクリプト = document.createElement('script'); スクリプトID = 'jsonp'; script.src = 'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=26350&req=2&csor=1&cb=getData&wd='+wd; document.body.appendChild(スクリプト); } //var ipt = document.querySelector('input'); ipt.addEventListener('keyup',function(){ var wd = this.value; getList(wd); コンソールログ(wd); }) </スクリプト> </本文> </html> 効果は次のとおりです。 JSONPの欠点JSONP は非常にシンプルで使いやすいため、開発者の間で非常に人気がありますが、次の 2 つの欠点もあります。
JSONP クロスドメイン シミュレーション Baidu 検索に関するこの記事はこれで終わりです。JSONP クロスドメイン シミュレーション Baidu 検索に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: SpringBoot を MySQL に接続してデータを取得し、バックエンド インターフェースに書き込む方法
>>: SpringBoot プロジェクトの Docker クイック デプロイメントの紹介
目次1. デバッグ対象2. WebSocketの機能3. ソケット接続を確立する3.1 部屋の作成方...
まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...
この記事の例では、カレンダーウィジェットを実装するためのjsの具体的なコードを参考までに共有していま...
<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...
原則的にはwindow.print()メソッドを呼び出すことですが、このメソッドは現在のページ全体を...
1. CDNこれは、Web サイト上で最もよく使用される加速機能です。分散サーバー レイアウトによ...
私は現在、自分自身の小さなプログラム プロジェクトに取り組んでいます。プロフェッショナルなフロントエ...
目次親コンポーネントは子コンポーネントと通信します子コンポーネントは親コンポーネントと通信しますコン...
Ubuntu 16.04 はデフォルトで PHP7.0 環境をインストールしますが、PHP7 は一部...
概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...
1. システム環境yum updateアップグレード後のシステムバージョンは[root@yl-web...
JavaScriptで非同期実行の結果を同期的に取得するには、 for ループ内でawaitを使用...
Oracle と MySQL の高可用性ソリューションについては、以前からまとめたいと思っていたので...
序文開発プロセスでは、すべてのデータではなく特定の期間内のデータをクエリするなど、クエリのフィルタリ...
Vue プロジェクトで div ホイールのズームインとズームアウト、ドラッグ効果、キャンバス効果に似...