14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSONとJSONP

Last updated at Posted at 2012-12-26

現在のWebでは異なるクロスドメインのサーバからデータを取得する機能を実装することがごく普通に行われていますね。

例えば、
http://examle.com
にホストされたサイトからtwitterのタイムラインを取得したり、Facebookのいいねボタンを押したりするとか。そんなときに役に立っているのがJSONPという仕組みなんです。

まず、JSONPが必要となった経緯とは…
SOP(Same Origin Policy)[同一生成元ポリシー]によって、最初にページを取得したホスト以外のホストに対してリクエストを送ることができないんです。
つまり、
http://example.com
にホストされたWebページから
http://example.org/xxxxx
にリクエストを送信してデータを取得することは原則的にできません。

じゃあ、どうするか。ここで登場するのがJSONPです。
SOPの制限によりリクエストを飛ばすことはできないけど、リソースをインクルードすることはできるんです。
どういうことかというと

sample.html
<script src="http://exampleA.com"/>
<script src="http://exampleB.com"/>

と言う形でリソースを取得してくることは可能。
ならば、取り込んだソースを実行すればいいじゃんというのがJSONP

つまりこんなイメージ
以下のソースの①が読まれると、宣言してあるcallbacksampleが呼ばれるという仕組みですね。

sample.html
<script>
	function callbacksample(json){
		//use jsonコード	
	}
</script>
<script src="http://example.com"/> …①
// ①では以下のソースを取得する。
// callbacksample({id:"id1",name:"name"});

で実際どう使うのかというのはまたいつか書きます。
※jQueryなどのライブラリを使った方が楽なので推奨です。

14
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?