<?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>ハセテツラボ &#187; Ajax</title>
	<atom:link href="http://tt-house.com/category/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://tt-house.com</link>
	<description>生涯一開発屋</description>
	<lastBuildDate>Wed, 08 Sep 2010 23:42:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>jQueryを使ってjsonpでやりとりする</title>
		<link>http://tt-house.com/2009/02/jqueryjsonp.html</link>
		<comments>http://tt-house.com/2009/02/jqueryjsonp.html#comments</comments>
		<pubDate>Thu, 19 Feb 2009 09:27:55 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.tt-house.com//wp/?p=87</guid>
		<description><![CDATA[クライアント側のソース。今回のjQueryは1.3.1を利用しています。 $.a...]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftt-house.com%252F2009%252F02%252Fjqueryjsonp.html%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22jQuery%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6jsonp%E3%81%A7%E3%82%84%E3%82%8A%E3%81%A8%E3%82%8A%E3%81%99%E3%82%8B%22%20%7D);"></div>
<p>クライアント側のソース。今回のjQueryは1.3.1を利用しています。</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>$.ajax({<br />&nbsp; url: &#8216;http://hogehoge.com/api/,<br />&nbsp; dataType: &#8216;jsonp&#8217;,<br />&nbsp; success: function(data)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;成功時のコールバック関数<br />&nbsp; }<br />});</p>
</blockquote>
<p dir="ltr">hogehoge.com/api/に目的のAPIが置いてある前提です。そこにアクセスします。で、サーバ側のアクセスログを観ていると、実際にアクセスしてくるURIは</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr">http://hogehoge.com/api/?callback=jsonp1235002429334&amp;_=1235002440850</p>
</blockquote>
<p dir="ltr">となっています。jQueryが付与しているんですかね。これは、結果は「jsonp1235002429334」というコールバック関数に渡してね、という意味合いのようです。クライアント側でコールバック関数の名前を指定していないのにちゃんと成功時のコールバック関数が呼ばれるのは、jQueryがこっそりと処理してくれていたからのようです。</p>
<p dir="ltr">で、サーバ側のレスポンスは</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr">jsonp1235002429334({&#8220;address&#8221;:&#8221;東京都足立区大谷田&#8221;});</p>
</blockquote>
<p dir="ltr">でOK。これは例として、郵便番号を投げると該当住所を返すapiです。値はクライアント側コールバック関数のdataに格納されます。住所にアクセスしたい場合は</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr">data.address</p>
</blockquote>
<p dir="ltr">で「東京都足立区大谷田」が返ってきます。jsonpを利用することでクロスドメインが可能になります。これで郵便番号から住所に変換、メールアドレスの正規表現チェック、等々の共通処理は一元管理できます。マスタが一箇所で済むのはメンテナンスも楽になります。</p>
<p dir="ltr">ただ、インターネット上に公開されているので、どこからアクセスがあるかわかりません。ホストで絞る、等の制限は必要かもしれませんね。</p>

]]></content:encoded>
			<wfw:commentRss>http://tt-house.com/2009/02/jqueryjsonp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>はじめてのAjax</title>
		<link>http://tt-house.com/2006/03/ajax.html</link>
		<comments>http://tt-house.com/2006/03/ajax.html#comments</comments>
		<pubDate>Wed, 08 Mar 2006 19:01:34 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Ajax]]></category>

		<guid isPermaLink="false">http://www.tt-house.com//wp/?p=15</guid>
		<description><![CDATA[&#60;html&#62; 	&#60;head&#62; 		&#60;meta h...]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftt-house.com%252F2006%252F03%252Fajax.html%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AEAjax%22%20%7D);"></div>
<blockquote><p>
&lt;html&gt;<br />
	&lt;head&gt;<br />
		&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html;charset=Shift_JIS&#8221; /&gt;<br />
		&lt;title&gt;ajax-test&lt;/title&gt;<br />
		&lt;script language=&#8221;javascript&#8221;&gt;<br />
			function ReadAtom(data,fileName,async)<br />
			{<br />
				var httpobj = new ActiveXObject(&#8220;Msxml2.XMLHTTP&#8221;);<br />
				httpobj.open(&#8216;GET&#8217;,fileName,async);</p>
<p>				httpobj.onreadystatechange = function()<br />
				{ <br />
					if (httpobj.readyState==4)<br />
					{<br />
						document.getElementById(&#8216;hoge&#8217;).innerHTML = httpobj.responseText;<br />
					}<br />
				}</p>
<p>				httpobj.send(data);<br />
			}<br />
		&lt;/script&gt;<br />
	&lt;/head&gt;<br />
	&lt;body&gt;<br />
		&lt;form&gt;<br />
			&lt;input type=&#8221;button&#8221; id=&#8221;btnGet&#8221; name=&#8221;btnGet&#8221; value=&#8221;read atom&#8221; onclick=&#8221;ReadAtom(&#8221;,&#8217;./atom.xml&#8217;,true)&#8221;&gt;<br />
		&lt;/form&gt;<br />
		&lt;hr /&gt;<br />
			&lt;div id=&#8221;hoge&#8221;&gt;&lt;/div&gt;<br />
	&lt;/body&gt;<br />
&lt;/html&gt;
</p></blockquote>
<p>以外とこれだけで通信自体はできてしまう。XMLパーサをMSXMLに固定していたり、エラー処理がはいっていなかったりと問題はあるが、通信だけならコレで十分かと。</p>
<p>あ、同一ディレクトリにatom.xmlというファイルが必要です。</p>
<p>Ajaxって、DynamicHTMLと混同している人多いですよね。あくまでコレは非同期でJavaScriptを使ってXML通信をする技術でしょう。まぁXMLじゃなくてもテキストでも流れてくれるんですけどね。</p>
<p>ちなみにドメイン超えはできないらしいです。</p>

]]></content:encoded>
			<wfw:commentRss>http://tt-house.com/2006/03/ajax.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
