<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JSONP &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/jsonp/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Fri, 09 Mar 2012 09:37:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>GoogleスプレッドシートをJSONPで利用する（後編）</title>
		<link>https://blog.mach3.jp/2012/03/09/get-spreadsheet-as-json-02.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 09 Mar 2012 09:37:51 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2313</guid>

					<description><![CDATA[『GoogleスプレッドシートをJSONPで利用する（前編）』の続きです。 一連の処理をまとめてみたスクリプトを紹介します。 書いてみたもの SpreadSheetLoader mach3/js-spreadsheetl [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>『<a href="/2012/03/get-spreadsheet-as-json.html">GoogleスプレッドシートをJSONPで利用する（前編）</a>』の続きです。<br />
一連の処理をまとめてみたスクリプトを紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-wdd_L9degVk/T1IymJTfKtI/AAAAAAAABdk/YZrFvGpXApA/s400/201203032357.png" alt="GoogleスプレッドシートをJSONPで利用する（後編）"/></figure>



<p></p>



<span id="more-2313"></span>



<h2 class="wp-block-heading">書いてみたもの</h2>



<h3 class="wp-block-heading">SpreadSheetLoader</h3>



<p><a href="https://github.com/mach3/js-spreadsheetloader">mach3/js-spreadsheetloader via GitHub</a></p>



<ul class="wp-block-list">
<li>スプレッドシートのJSONを読み込みます</li>



<li>読み込んだデータを整理します</li>



<li>jQuery 1.7+ が必要です</li>
</ul>



<h2 class="wp-block-heading">簡単な使い方</h2>



<h3 class="wp-block-heading">1. URLを取得</h3>



<p>まず<a href="">前編</a>の記事を参考にしてURLを取得してきましょう。<br />
形式は「Atom」または「RSS」の、「セル」を選択してください。<br />
こんな感じのURLですね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://spreadsheets.google.com/feeds/cells/**********/***/public/basic
</div></figure>
</blockquote>



<h3 class="wp-block-heading">2. 読み込む</h3>



<p>まずはインスタンスを初期化し、URLを渡し、読み込みます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 1. インスタンス初期化</span>
<span class="hljs-keyword">var</span> myloader = <span class="hljs-keyword">new</span> SpreadSheetLoader( &#91;your_url] );

<span class="hljs-comment">// 2. readyイベントハンドラを登録</span>
myloader.on(<span class="hljs-string">"ready"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> data = <span class="hljs-keyword">this</span>.getData();
});

<span class="hljs-comment">// 3. load()</span>
myloader.load();
</code></span></pre>


<ol class="wp-block-list">
<li>コンストラクタの引数にURLを渡して初期化します。<br /><br />URLは後から<em>setUrl()</em>で渡すことも出来ます。</li>



<li><em>on()</em>で<em>ready</em>イベントへのハンドラを設定します。<br /><br /><em>ready</em>イベントは、スプレッドシートが読み込まれ、データが整理された時点で発火します。</li>



<li><em>load()</em>で読み込み開始</li>
</ol>



<h3 class="wp-block-heading">3. データを利用する</h3>



<p>readyイベントハンドラの中では、自由にデータを利用する事ができます。<br />
あとは煮るなり焼くなり。<br />
データの利用の仕方は…</p>



<h2 class="wp-block-heading">データを取得する</h2>



<p>整理されたデータを取得して利用する為には、幾つかの方法が用意されています。</p>



<dl>
<dt>getData() : Array</dt>
<dd>データがまるごと配列で返されます。</dd>
</dl>



<pre class="wp-block-preformatted">myloader.on("ready", function(){
    var data = this.getData();
    console.log(data[3]); // 4番目のデータ
});
</pre>



<dl>
<dt>getItem(condition) : Array</dt>
<dd>条件に合うデータのみを配列で返します。<br />
条件はオブジェクトで渡します。</dd>
</dl>



<pre class="wp-block-preformatted">myloader.on("ready", function(){
    var myItems = this.getItem({color:"red", price:800}); // 色がredで、価格が800の物を抽出
});
</pre>



<dl>
<dt>each(callback)</dt>
<dd>データに対して繰り返し処理を行います。（中身はjQuery.fn.eachです）</dd>
</dl>



<pre class="wp-block-preformatted">myloader.on("ready", function(){
    var total = 0;
    this.each(function(){
      total += this.price;
    });
    console.log( "Total price:", total ); // 全データのpriceの合計
});
</pre>



<h2 class="wp-block-heading">試してみる</h2>



<h3 class="wp-block-heading">ソース</h3>



<p>例えば、<a href="https://docs.google.com/spreadsheet/ccc?key=0Ark6jIWYcmkLdEIyTURIVTAwdTM2Z00wUkpfY2hyRlE#gid=0">こんな表</a>を読み込んでみます。</p>



<p><iframe width="500" height="200" frameborder="0" src="https://docs.google.com/spreadsheet/pub?key=0Ark6jIWYcmkLdEIyTURIVTAwdTM2Z00wUkpfY2hyRlE&amp;output=html&amp;widget=true"></iframe></p>



<h3 class="wp-block-heading">デモ</h3>



<p><iframe width="100%" height="300" src="http://jsfiddle.net/rCj9B/1/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>前記事の通り、使える場面というのはわりと限られてそうではありますが、<br />
何かの折に使ってみようかなと思っております。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>jQueryはJSONPの理解の妨げになるか？</title>
		<link>https://blog.mach3.jp/2010/10/19/jquery-jsonp.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 19 Oct 2010 02:17:15 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=922</guid>

					<description><![CDATA[コンパクトで汎用的な「JSON」は、今やWebサービスの連携になくてはならない存在ですね。 各種APIもXML以上にJSON対応が必要とされていると思います。 今日はそんなJSON/JSONPと、jQueryが便利すぎて [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>コンパクトで汎用的な「JSON」は、今やWebサービスの連携になくてはならない存在ですね。<br />
各種APIもXML以上にJSON対応が必要とされていると思います。<br />
今日はそんなJSON/JSONPと、jQueryが便利すぎて逆に困ってしまう！というお話。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TLxuJgDsHdI/AAAAAAAABD0/NNWrpvho1qw/201010190055.png" alt="jQueryはJSONPの理解の妨げになるか？"/></figure>



<p></p>



<span id="more-922"></span>



<h2 class="wp-block-heading">JSON</h2>



<p><em>JSON</em>とは「JavaScript Object Node」の略で、<br />
その名の通りJavaScriptのオブジェクトを表した物。<br />
中身は勿論JavaScriptのオブジェクトリテラルです。</p>


<pre class="wp-block-code"><span><code class="hljs language-json">{
    <span class="hljs-attr">"status"</span> : <span class="hljs-string">"success"</span>,
    <span class="hljs-attr">"content"</span> : &#91; <span class="hljs-string">"hoge"</span>, <span class="hljs-string">"fuga"</span>, <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> ]
}
</code></span></pre>


<p>昨今はXMLにかわって情報をやり取りする際のフォーマットとして<br />
頻繁に使われるようになりました。</p>



<p>ただ、外部サービスと通信する際に、<br />
AjaxでJSONをやり取りするには「<em>クロスドメイン</em>」という壁があります。<br />
つまり、他ドメインに属するファイルはAjaxでは基本的に取得出来ないのです。</p>



<p>そこでJSONPの出番です。</p>



<h2 class="wp-block-heading">JSONP</h2>



<p><em>JSONP(JSON with Padding）</em>というのは、<br />
<em>コールバック関数</em>を介してJSONのデータを受け取る手法です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">myfunc({
    <span class="hljs-string">"status"</span> : <span class="hljs-string">"success"</span>,
    <span class="hljs-string">"content"</span> : &#91; <span class="hljs-string">"hoge"</span>, <span class="hljs-string">"fuga"</span>, <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> ]
});
</code></span></pre>


<p>JSONを出力する側では、こんな感じに関数の引数に渡してやります。</p>



<p>上では関数名が「<em>myfunc</em>」になっていますが、<br />
APIを公開している多くのサービスは、<br />
大抵この関数名をパラメータで指定出来るようになっています。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>&gt;</span><span class="javascript">
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">myfunc</span>(<span class="hljs-params">data</span>)</span>{
    <span class="hljs-built_in">console</span>.log( data );
}
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://example.com/hoge.json?callback=myfunc"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>コールバック関数を宣言したら、あとはscript要素でAPIにアクセスする。<br />
「<em>myfunc</em>」内でJSONのデータを受け取り、煮たり焼いたりしましょう。<br />
思いのほかシンプル。</p>



<p>そんなJSONPですが、<br />
jQueryを通すとJSONPの仕組みが隠蔽されたような形になります。</p>



<h2 class="wp-block-heading">jQueryでJSONPを使うと…</h2>



<h3 class="wp-block-heading">jQuery.ajax</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.ajax({
    <span class="hljs-attr">url</span>:<span class="hljs-string">"http://example.com/hoge.json"</span>,
    <span class="hljs-attr">dataType</span>:<span class="hljs-string">"jsonp"</span>,
    <span class="hljs-attr">jsonp</span>:<span class="hljs-string">"callback"</span>,
    <span class="hljs-attr">success</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
        <span class="hljs-built_in">console</span>.log( data );
    }
});
</code></span></pre>


<p>上の例と同じ処理をしているわけですが、<br />
普通のAjaxとほぼ同じ書式で出来てしまいますね。<br />
違うのは、<em>dataType</em>パラメータと<em>jsonp</em>パラメータぐらい。</p>



<p><em>script要素の追加</em>、<em>コールバック関数の指定</em>等は、<br />
jQueryが勝手に代理で行ってくれます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://example.com/hoge.json?calback=jsonp1287411860619"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>DOMを見ていると、こんな感じのscript要素が生成されています。<br />
コールバック関数名も動的に生成し、その中身を<em>success</em>で設定した関数にしているわけですね。</p>



<h2 class="wp-block-heading">まずは生JSで書いてみた方が良いと思う</h2>



<p>前半で紹介したとおり、JSONPは全くもってシンプルな手法なのですが、<br />
このようにjQueryを用いることで得体の知れない物になってしまっていませんか？<br />
面倒な処理を代理で行ってくれるのがフレームワークなのですが、<br />
その親切が学習する上での妨げになってしまう事があります。<br />
（JSONPの例に限った話ではなく）</p>



<p>まずは、フレームワークに頼らない生のスクリプトで実験してみる。</p>



<p>そうする事が、その技術に対する理解を深められるだけでなく、<br />
フレームワークをより上手く活用出来るようになる為の近道になるのではないかと<br />
自戒の意も含めてここに記しておきます。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
