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 クイック デプロイメントの紹介
序文今日、Xianyuを閲覧していたとき、各行の高さが同じではないことに気付きました。調べてみると、...
React tsxは参照用にランダムな検証コードを生成します。具体的な内容は次のとおりです。最近、t...
VirtualBoxのHost Only+NATモードのネットワーク構成は参考用です。具体的な内容は...
この記事では、ドロップダウンメニューを表示および非表示にするJavaScriptの具体的なコードを参...
ポーリングアルゴリズムの紹介多くの人が職場で nginx を使用しており、その設定に精通しています。...
外部結合の構文は次のとおりです。フィールド名を選択FROM テーブル名 1 LEFT|RIGHT|F...
目次1. 遭遇した問題2. アイデア3. コード1. 遭遇した問題私たちは皆、mysqldump を...
HTML ボタン自体を中央に配置するにはどうすればよいでしょうか? このアイデアは簡単に見つかります...
目次1. 組み込みオブジェクト2. 数学オブジェクト1. Mathオブジェクトの使用2. 指定された...
この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...
最初の方法: デモとしてボタンをクリックしてテキストを表示または非表示にするクラスを動的に追加します...
SVG (Scalable Vector Graphics)は、XML 構文に基づいた画像形式です。...
1. 対象環境Windows 7 64ビット2. 材料(1)VC++2010リリースパッケージ(64...
例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...
序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタ...