検索
ホームページウェブフロントエンドjsチュートリアルjquery' s jsonpは例で説明しました

jQuery's JSONP Explained with Examples

キーポイントの概要

概要

  • jsonp(json with padding)により、クロスドメインのajaxコールが許可されており、さまざまなソースからのデータへのデータへのアクセスを制限する相同ポリシーを回避します。これは、ブラウザが解釈できる関数呼び出しを含むサーバーを返すJSONデータを返すことによって行われます。
  • JSONPは、さまざまなソースからデータを取得し、さまざまなサービスのコンテンツにアクセスするのに役立ちますが、いくつかの制限もあります。 JSONPは、クロスドメインのGETリクエストのみを実行でき、サーバーによって明示的にサポートされる必要があります。また、クロスサイトスクリプティング(XSS)攻撃の可能性を開くため、セキュリティの問題が潜在的に問題を抱えています。
  • 相同政策に対するその他のソリューションには、プロキシの使用またはクロスオリジンリソース共有(CORS)の実装が含まれます。プロキシを使用すると、サーバー側のコードがクロスオリジン要求を実行できますが、CORSでは、応答に新しいアクセス制御コントロールオリジンHTTPヘッダーを含めることにより、ブラウザがドメイン間で通信できます。ただし、各方法には独自の欠点と制限があります。

この記事は、品質の問題に対処するために2016年6月23日に更新されました。古い記事に関連するコメントは削除されています。 Webベースのアプリケーションを開発し、制御下にないドメインからデータをロードしようとしている場合、ブラウザのコンソールに次のメッセージが表示される可能性があります:XMLHTTPREQUESTはhttps://www.phpをロードできません.CN/LINK/0DF0DBFC4725C2259DC0BB045E9BF6D2 🎜> 'したがって、アクセスが許可されていません この記事では、jqueryとjsonpを使用して、このエラーの原因とこの問題を解決する方法を調べます。

同じ起源ポリシー

一般的なWebページは、xmlhttprequestオブジェクトを使用してリモートサーバーにデータを送信および受信できますが、同じ発作ポリシーが実行できるものを制限します。これは、ブラウザセキュリティモデルの重要な概念であり、WebブラウザがページAのスクリプトがページBのデータにアクセスできるようにすることができると規定しています。ページのソースは、その、host

ポート番号で定義されます。たとえば、このページのソースは「https」、「www.sitepoint.com」、「80」です。ホモジーポリシーはセキュリティメカニズムです。スクリプトがドメインからデータを読み取り、サーバーに送信することを防ぎます。これがなければ、悪意のあるウェブサイトがセッション情報を別のサイト(GmailやTwitterなど)にクロールし、あなたに代わってアクションを実行するのは簡単です。残念ながら、それはまた、上に表示されるエラーを引き起こし、多くの場合、開発者が正当なタスクを完了しようとするのに問題を引き起こします。 障害の例

何が機能しないのか見てみましょう。これは別のドメインにあるJSONファイルであり、jQueryのGetJsonメソッドを使用してロードしたいと考えています。

$.getJSON(
  "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json",
  function(json) { console.log(json); }
);

ブラウザでコンソールを開いて試してみると、上記のメッセージに似たメッセージが表示されます。それで、私たちは何ができますか?

可能な解決策幸いなことに、すべてが相同政策の影響を受けているわけではありません。たとえば、別のドメインから画像またはスクリプトをページにロードすることは完全に可能です。CDN(たとえば)からjQueryを含めるときにこれを行います。これは、

タグを作成し、その

属性をJSONファイルに設定し、ページに挿入できることを意味します。 <script></script> src

これは機能しますが、含むデータにアクセスできないため、あまり役に立ちません。
var script = $("<script>", {
    src: "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json",
    type: "application/json"
  }
);

$("head").append(script);

JSONP jsonp(パディング付きのJSONに代わって)は、この手法に基づいており、返されたデータにアクセスする方法を提供します。これは、ブラウザが解釈できる関数呼び出し(「人気」)を含むサーバーを返すJSONデータを提供することによって実装されます。この関数は、JSONP応答を評価するページで定義する必要があります。 前の例がどのように見えるか見てみましょう。これは、元のJSONデータをA関数でラップする更新されたJSONファイルです。

これにより、予想される結果がコンソールに記録されます。現在(かなり限られていますが)クロスドメインAjaxがあります。 jsonCallback

function jsonCallback(json){
  console.log(json);
}

$.ajax({
  url: "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json",
  dataType: "jsonp"
});
サードパーティapi

一部のサードパーティAPIでは、リクエストが返されたときに実行する必要があるコールバック関数の名前を指定できます。そのようなAPIの1つはGitHub APIです。 次の例では、John Resig(jQuery Creator)のユーザー情報を取得し、

コールバック関数を使用してコンソールへの応答をログに記録します。

これは次のように書くこともできます logResults URLの最後にある

function logResults(json){
  console.log(json);
}

$.ajax({
  url: "https://api.github.com/users/jeresig",
  dataType: "jsonp",
  jsonpCallback: "logResults"
});
jqueryに、jsonの代わりにJSONP要求を処理していることを伝えます。 jQueryは、リクエストが返されたときに呼び出すコールバック関数を自動的に登録します。

jqueryのgetjsonメソッドの詳細を知りたい場合は、ajax/jquery.getjsonの簡単な例
$.getJSON("https://api.github.com/users/jeresig?callback=?",function(json){
  console.log(json);
});
をチェックしてください。

?予防策

しかし、あなたが今までに気づいたかもしれないように、このアプローチにはいくつかの欠点があります。

たとえば、 JSONPはクロスドメインGETリクエストのみを実行でき、サーバーはそれを明示的にサポートする必要があります。 JSONPにはセキュリティの問題がないわけではないため、他のソリューションを簡単に紹介しましょう。 エージェントを使用して

サーバー側のコードは、同じオリジンポリシーの対象ではなく、問題なくクロスオリジンリクエストを実行できます。そのため、何らかのプロキシを作成し、必要なデータを取得するために使用できます。最初の例を参照してください:

クライアントの

しかし、この方法には欠点もあります。たとえば、サードパーティのサイトが認証にCookieを使用している場合、この方法は機能しません。

/* proxy.php */
$url = "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec ($ch);
curl_close ($ch);
echo $result;
cors

クロスオリジンリソース共有(CORS)は、ブラウザがドメイン間で通信できるW3C仕様です。これは、応答に新しいアクセス制御コントロールオリジンHTTPヘッダーを含めることによって行われます。

最初の例を参照すると、.htaccessファイル(Apacheを仮定)に次のことを追加して、さまざまなソースからのリクエストを許可できます。

$.getJSON(
  "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json",
  function(json) { console.log(json); }
);
(apacheではないサーバーを実行している場合は、こちらで確認してください:

https://www.php.cn/link/819e2e55be8ef0957b56ea94356bfbb79

最近のチュートリアルの1つでCORSの詳細をご覧ください。CORS

の詳細

結論

JSONPを使用すると、相同ポリシーをバイパスし、ある程度クロスドメインAjaxの呼び出しを行うことができます。それは魔法の丸薬ではなく、もちろん問題がありますが、場合によっては、異なるソースからデータが取得されると非常に貴重であることが証明される可能性があります。

JSONPでは、さまざまなサービスからさまざまなコンテンツを抽出することもできます。多くの有名なWebサイトは、事前定義されたAPIを介してコンテンツにアクセスできるJSONPサービス(Flickrなど)を提供しています。それらの完全なリストは、プログラム可能なWeb APIディレクトリにあります。

(以下はFAQパーツであり、複製情報を避けるために元のテキストに従って調整および簡素化されています) JSONP(FAQ)

についてのFAQ

  • JSONとJSONPの主な違いは何ですか? JSONとJSONPの両方は、サーバーとWebアプリケーション間のデータの処理に使用される形式です。主な違いは、クロスドメイン要求を処理する方法です。 JSONは、相同ポリシー(Webブラウザーに実装されたセキュリティ対策)のために、クロスドメイン要求をサポートできません。一方、JSONPは、人口測定方法を使用してこのポリシーをバイパスし、クライアントとは異なるドメインを持つサーバーからデータをリクエストできるようにします。

  • JSONPはどのようにして同じオリジンポリシーをバイパスしますか? jSonpは、パディングまたは「充填リクエスト」メソッドを使用して相同ポリシーをバイパスします。この方法では、クライアントは、URLにコールバック関数を追加することにより、異なるドメインのサーバーからデータを要求します。次に、サーバーはこの関数で要求されたデータをラップし、クライアントに送り返します。クライアントはこの関数を実行してデータにアクセスします。この方法により、JSONPは相同政策によって課されるクロスドメインの制限を克服することができます。

  • jsonpは安全ですか? JSONPは相同政策の解決策を提供していますが、独自のセキュリティリスクがあります。 JSONPはサーバーから受信したスクリプトを実行することを伴うため、サーバーが破損している場合、クロスサイトスクリプト(XSS)攻撃の可能性が開きます。したがって、信頼できるソースでのみJSONPを使用してください。

  • JSONPはエラー応答を処理できますか? JSONとは異なり、JSONPにはエラー処理が組み込まれていません。 JSONP要求が失敗した場合、ブラウザはエラーをスローせず、コールバック関数は実行されません。 JSONPのエラーを処理するために、指定された時間内にコールバック関数が実行されない場合、エラーをトリガーするタイムアウトメカニズムを実装できます。

  • jQueryを使用してJSONPリクエストを作成するにはどうすればよいですか? jQueryは、$ .ajax()メソッドを使用してJSONP要求を簡単に作成する方法を提供します。 $ .ajax()設定でデータ型を「jsonp」として指定する必要があります。

  • JSONPの制限は何ですか? jsonpにはいくつかの制限があります。 GETリクエストのみをサポートし、投稿またはその他のHTTPメソッドをサポートしていません。また、エラー処理機能もありません。さらに、JSONPは、相同政リをバイパスするためのアプローチにより、セキュリティリスクをもたらします。

  • JSONPは今でも使用されていますか? JSONPは過去のクロスドメイン要求の一般的なソリューションでしたが、CORSはCORS(オリジンクロスリソース共有)の出現により、使用頻度が低くなりましたが、CORSはより安全で強力なクロスドメインを提供します。リクエスト。

以上がjquery&#x27; s jsonpは例で説明しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
舞台裏: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が含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

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

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

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)