SlideShare a Scribd company logo
1 of 19
Download to read offline
いまさら聞けないJSONPのまとめ
2015.5.25
Yujiro Araki
Ajaxの制約
クロスドメイン通信を行うことができない
www.foo1.com www.bar1.com
①アクセス
$.ajax({
url: 'http://www.bar1.com/‘
});
②ページ表示
③Ajax実行②の内容
・JSON with padding(付け足しJSON)の略
・JSON(JavaScript Object Notation)を拡張した
プログラミングモデル
・SOP※による他サーバへの問い合わせ制限を回避
JSONPとは
引用:Web/DBプログラミング徹底解説
http://keicode.com/script/jsonp-same-origin-policy.php
※同一生成元ポリシー(Same Origin Policy)
理由:src属性に設定するURLはSOP適用外=異なるドメイン設定可能
もう少し分かりやすく言うと
script要素を利用してデータを取得
src属性に設定するURLはSOP適用外
script要素を利用する理由
script要素のsrc属性がSOP適用外であることを示す例
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js">
</script>
Google CDN
参考:https://developers.google.com/speed/libraries/
{ name: 'foo', price: 3000 }
JSONデータの例
showPrice({ name: 'foo', price: 3000 });
JSONPの例
<script>
function showPrice(data) {
alert("Name: " + data.name + ", Price: " + data.price);
}
showPrice({ name: 'foo', price: 3000 });
</script>
index.html
JSONPの利用(1/5)
JSONPによるクロスドメインの通信: 第1回 JSONPとjQueryを組み合わせ、強力なマッシュアップを迅速に作成する
http://www.ibm.com/developerworks/jp/web/library/wa-aj-jsonp1/
<script>
function showPrice(data) {
alert("Name: " + data.name + ", Price: " + data.price);
}
showPrice({ name: 'foo', price: 3000 });
</script>
この部分を他サーバ(user-domain)の外部ファイル読み込みにする
index.html
JSONPの利用(2/5)
<script>
function showPrice(data) {
alert("Name: " + data.name + ", Price: " + data.price);
}
</script>
<script src="http://user-domain/show.js"></script>
showPrice({ name: 'foo', price: 3000 });
show.js
index.html
JSONPの利用(3/5)
<script>
function showPrice(data) {
alert("Name: " + data.name + ", Price: " + data.price);
}
</script>
<script src="http://user-domain/show.js"></script>
showPrice({ name: 'foo', price: 3000 });
show.js
index.html
この部分を動的生成にする
JSONPの利用(4/5:動的生成)
動的生成にする理由:イベント発生契機に通信を行いたい場合
<script>
function showPrice(data) {
alert("Name: " + data.name + ", Price: " + data.price);
}
function show() {
var script = document.createElement('script');
script.src = 'http://user-domain/show.js';
(document.getElementsByTagName('head'))[0].appendChild(script);
}
</script>
<a href="#" onclick="show() return false;">click</a>
index.html
show.js
showPrice ({ name: 'foo', price: 3000 });
JSONPの利用(5/5:動的生成)
<script>
function callback(data) {
alert("Name: " + data.name + ", Price: " + data.price);
}
function show() {
var script = document.createElement('script');
script.src = 'http://user-domain/show.php?jsonp=callback;
(document.getElementsByTagName('head'))[0].appendChild(script);
}
</script>
<a href="#" onclick="show() return false;">click</a>
<?php
echo $_GET['jsonp'] . "({ name: 'foo', price: 3000 });";
?>
show.php(他サーバ)
index.html
クエリーパラメータ「jsonp」の値をコールバック関数名として設定
関数のパラメータにJSONを設定
JSONPの実用的な実装例
<script>
$.ajax({
dataType: 'jsonp',
url: "http://user-domain/hoge.php",
success: function(data){
alert("Name: " + data.name + ", Price: " + data.price);
},
});
</script>
jQueryによるAjax+JSONPのサポート:$ajax
index.html
<script>
$.ajax({
dataType: 'jsonp',
crossDomain: true,
jsonp : 'jsoncallback',
url: "http://user-domain/hoge.php",
success: function(data){
alert("Name: " + data.name + ", Price: " + data.price);
},
});
</script>
jQueryによるAjax+JSONPのサポート:$ajax
index.html
<script>
$.getJSON("http://user-domain/hoge.php?&callback=?",
function(data) {
$('div').html(data.title + data.description);
});
</script>
クエリーパラメータ「callback(名称は何でもよい)」の値に
「?」を設定することでJSONPリクエストとして扱われる。
「?」の部分はjQueryで自動生成
実際のHTTPリクエスト:
http://user-domain/hoge.php?callback
= jQuery17208957796988929256_1334645135858&_=1334645136039
<?php
echo $_GET['jsonp'] . '(' . "{ title: 'foo', description: 'bar' }" . ');';
?>
hoge.php
実行される
関数
最後の“_=[TIMESTAMP]“はキャッシュを無効にするためのもの http://api.jquery.com/jQuery.ajax/
$.ajaxでのみ有効な模様
jQueryによるAjax+JSONPのサポート:$getJSON
$.getJSON("http://user-domain/hoge.php?jsoncallback=?",
{
aaa : bbb,
},
function(data) {
alert("first success");
$('div').html(data.title + data.description);
})
.done(function() {
alert("second success");
})
.fail(function() {
alert("error");
})
.always(function() {
alert("complete");
});
$.getJSON
Google Code: jquery-jsonp
https://github.com/jaubourg/jquery-jsonp
エラーハンドリング、キャッシング、タイムアウトなど、デフォルトでは対応でき
ない機能が使えるようになるみたい
jQueryでJSONP
http://blog.mudaimemo.com/2008/09/jqueryjsonp.html
静的なJSONデータをパラメータに持つJavaScript関数を呼び出す方法

More Related Content

What's hot

マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
Takuya ASADA
 

What's hot (20)

PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
Firebase Remote Config + Kotlin = EasyFRC
Firebase Remote Config + Kotlin = EasyFRCFirebase Remote Config + Kotlin = EasyFRC
Firebase Remote Config + Kotlin = EasyFRC
 
Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。
 
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
 
Gstreamer plugin devpt_1
Gstreamer plugin devpt_1Gstreamer plugin devpt_1
Gstreamer plugin devpt_1
 
누구나 손쉽게 사용하는 BlockChain, 비즈니스에 활용하기! - 박혜영, AWS솔루션즈 아키텍트/정권호, 람다 256 CSO/ 이...
누구나 손쉽게 사용하는 BlockChain, 비즈니스에 활용하기!  - 박혜영, AWS솔루션즈 아키텍트/정권호, 람다 256  CSO/ 이...누구나 손쉽게 사용하는 BlockChain, 비즈니스에 활용하기!  - 박혜영, AWS솔루션즈 아키텍트/정권호, 람다 256  CSO/ 이...
누구나 손쉽게 사용하는 BlockChain, 비즈니스에 활용하기! - 박혜영, AWS솔루션즈 아키텍트/정권호, 람다 256 CSO/ 이...
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
공간정보 스터디 1주차
공간정보 스터디 1주차공간정보 스터디 1주차
공간정보 스터디 1주차
 
AWS re:Invent 2016: Cloud agility and faster connectivity with AT&T NetBond a...
AWS re:Invent 2016: Cloud agility and faster connectivity with AT&T NetBond a...AWS re:Invent 2016: Cloud agility and faster connectivity with AT&T NetBond a...
AWS re:Invent 2016: Cloud agility and faster connectivity with AT&T NetBond a...
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
OpenStack with SR-IOV
OpenStack with SR-IOVOpenStack with SR-IOV
OpenStack with SR-IOV
 
Hybrid Public Key Encryption (HPKE)
Hybrid Public Key Encryption (HPKE)Hybrid Public Key Encryption (HPKE)
Hybrid Public Key Encryption (HPKE)
 
QGIS for Park GIS (국립공원관리공단의 QGIS 활용사례)
QGIS for Park GIS (국립공원관리공단의 QGIS 활용사례)QGIS for Park GIS (국립공원관리공단의 QGIS 활용사례)
QGIS for Park GIS (국립공원관리공단의 QGIS 활용사례)
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDDRuby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
 
cluster-monitoringで困ったこと学んだこと
cluster-monitoringで困ったこと学んだことcluster-monitoringで困ったこと学んだこと
cluster-monitoringで困ったこと学んだこと
 
統合バックアップbaculaを使ってみよう(GUI編)
統合バックアップbaculaを使ってみよう(GUI編)統合バックアップbaculaを使ってみよう(GUI編)
統合バックアップbaculaを使ってみよう(GUI編)
 
OSC北海道2014_JPUG資料
OSC北海道2014_JPUG資料OSC北海道2014_JPUG資料
OSC北海道2014_JPUG資料
 

Similar to いまさら聞けないJSONPのまとめ

JSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めようJSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めよう
VOYAGE GROUP
 
Tokyowebmining5 yokkuns
Tokyowebmining5 yokkunsTokyowebmining5 yokkuns
Tokyowebmining5 yokkuns
Yohei Sato
 
Visualize terms network in Lucene index
Visualize terms network in Lucene indexVisualize terms network in Lucene index
Visualize terms network in Lucene index
Koji Sekiguchi
 

Similar to いまさら聞けないJSONPのまとめ (19)

Jggug20120901pojojson
Jggug20120901pojojsonJggug20120901pojojson
Jggug20120901pojojson
 
WordPressAPI
WordPressAPIWordPressAPI
WordPressAPI
 
JSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めようJSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めよう
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
 
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
 
Tokyowebmining5 yokkuns
Tokyowebmining5 yokkunsTokyowebmining5 yokkuns
Tokyowebmining5 yokkuns
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習
 
Oracle Labs 発! Parallel Graph AnalytiX(PGX)
Oracle Labs 発! Parallel Graph AnalytiX(PGX)Oracle Labs 発! Parallel Graph AnalytiX(PGX)
Oracle Labs 発! Parallel Graph AnalytiX(PGX)
 
Visualize terms network in Lucene index
Visualize terms network in Lucene indexVisualize terms network in Lucene index
Visualize terms network in Lucene index
 
PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
codeless/serverless develop
codeless/serverless develop codeless/serverless develop
codeless/serverless develop
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
 
Pjax1
Pjax1Pjax1
Pjax1
 

More from Yujiro Araki

Websocketのお絵かきチャットサンプル
Websocketのお絵かきチャットサンプルWebsocketのお絵かきチャットサンプル
Websocketのお絵かきチャットサンプル
Yujiro Araki
 
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable TypeMTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
Yujiro Araki
 
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理
Yujiro Araki
 
Theme Framework in Depth - MT DDC Tokyo
Theme Framework in Depth - MT DDC TokyoTheme Framework in Depth - MT DDC Tokyo
Theme Framework in Depth - MT DDC Tokyo
Yujiro Araki
 
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作
Yujiro Araki
 

More from Yujiro Araki (9)

Movable Typeで承認ワークフロー
Movable Typeで承認ワークフローMovable Typeで承認ワークフロー
Movable Typeで承認ワークフロー
 
MovableTypeテンプレートタグのまとめ
MovableTypeテンプレートタグのまとめMovableTypeテンプレートタグのまとめ
MovableTypeテンプレートタグのまとめ
 
Movable Type カスタムフィールドのまとめ
Movable Type カスタムフィールドのまとめMovable Type カスタムフィールドのまとめ
Movable Type カスタムフィールドのまとめ
 
Websocketのお絵かきチャットサンプル
Websocketのお絵かきチャットサンプルWebsocketのお絵かきチャットサンプル
Websocketのお絵かきチャットサンプル
 
MTDDC 2012
MTDDC 2012MTDDC 2012
MTDDC 2012
 
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable TypeMTDDC Meetup Tokyo 2011:もっとディープにMovable Type
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
 
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作 - バージョン管理
 
Theme Framework in Depth - MT DDC Tokyo
Theme Framework in Depth - MT DDC TokyoTheme Framework in Depth - MT DDC Tokyo
Theme Framework in Depth - MT DDC Tokyo
 
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作
MT DDC Tokyo(テーマ編):テーマを使った手間いらずなサイト制作
 

Recently uploaded

Recently uploaded (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

いまさら聞けないJSONPのまとめ