そのため非同期通信の機能も Ajaxフレームワークである prototype.js を使うことにします。prototype.js がWebブラウザ間の違いを吸収してくれるので、プログラマーは簡単にプログラムを書くことができます。
最初は Ajax の基本的な動きと開発の流れに専念してもらいたいので、プログラムの解説は次回にします。今回ぜひ押えておいてほしい点は以下の通りです。
・動作確認はローカル環境のWebサーバー上で行なう
・必ずWebサーバーを起動している必要がある
・prototype.js を使う
・取得できるデータは同一ドメイン内のファイルに限られる
・画面への表示は innerHTML を使って動的に行なう
・複数のWebブラウザで動作確認する
それでは早速試してみましょう。以下の例は非同期通信の最も基本的なプログラムです。これが理解できるようになれば、ネット上にある様々なデータを活用できるようになります。
【1】新しく sample003 フォルダを作成します。
*Ajax の動作確認はローカル環境のWebサーバー上で行なうため、フォルダの作成場所に注意してください。
【2】今回は以下のようなファイルの構成になります。
*各ファイルは必ず UTF-8 形式で保存してください。
*「\」はWindowsでは円記号のことです。
保存先 C:\phpdev\www\ajax\sample003
ファイル名 pref.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="../lib/prototype.js"></script>
<script type="text/javascript" src="pref.js"></script>
<link href="pref.css" rel="stylesheet" type="text/css">
<title>pref</title>
</head>
<body>
<div>
<input type="button" id="btnData" value="データ取得" />
<input type="button" id="btnClear" value="クリア" />
</div>
<div id="state"></div>
<div id="result"></div>
</body>
</html>
保存先 C:\phpdev\www\ajax\sample003
ファイル名 pref.js
onload = init;
var state;
var result;
function init() {
$("btnData").onclick = prefDisp;
$("btnClear").onclick = clearDisp;
state = $('state');
result = $('result');
}
function prefDisp() {
state.innerHTML = "処理中です・・・<br />\n";
var url = "pref.xml";
var paramList = "";
new Ajax.Request(url,
{
method: 'get',
onSuccess: getData,
onFailure: showErrMsg,
parameters: paramList
});
function getData(data){
var response = data.responseXML.getElementsByTagName('Response');
var item = response[0].getElementsByTagName('Item');
var tmpHtml="";
for(i = 0; i < item.length; i++){
var prefCd = item[i].getElementsByTagName('PREF_CD');
var prefCdValue = prefCd[0].firstChild.nodeValue;
var prefName = item[i].getElementsByTagName('PREF_NAME');
var prefNameValue = prefName[0].firstChild.nodeValue;
tmpHtml += prefCdValue + " " + prefNameValue + "<br />\n";
}
result.innerHTML = tmpHtml;
state.innerHTML = "データを取得しました。<br />\n";
}
function showErrMsg(){
clearDisp();
state.innerHTML = "データを取得できませんでした。<br />\n";
}
}
function clearDisp() {
state.innerHTML = "";
result.innerHTML = "";
}
保存先 C:\phpdev\www\ajax\sample003
ファイル名 pref.css
#state {
font-size:16px;
color:#0000cc;
margin-top:10px;
margin-bottom:10px;
}
#result {
font-size:14px;
color:#000000;
}
保存先 C:\phpdev\www\ajax\sample003
ファイル名 pref.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Response>
<Items>
<Item>
<PREF_CD>1</PREF_CD>
<PREF_NAME>北海道</PREF_NAME>
</Item>
<Item>
<PREF_CD>2</PREF_CD>
<PREF_NAME>青森県</PREF_NAME>
</Item>
<Item>
<PREF_CD>3</PREF_CD>
<PREF_NAME>岩手県</PREF_NAME>
</Item>
<Item>
<PREF_CD>4</PREF_CD>
<PREF_NAME>宮城県</PREF_NAME>
</Item>
<Item>
<PREF_CD>5</PREF_CD>
<PREF_NAME>秋田県</PREF_NAME>
</Item>
<Item>
<PREF_CD>6</PREF_CD>
<PREF_NAME>山形県</PREF_NAME>
</Item>
<Item>
<PREF_CD>7</PREF_CD>
<PREF_NAME>福島県</PREF_NAME>
</Item>
<Item>
<PREF_CD>8</PREF_CD>
<PREF_NAME>東京都</PREF_NAME>
</Item>
<Item>
<PREF_CD>9</PREF_CD>
<PREF_NAME>神奈川県</PREF_NAME>
</Item>
<Item>
<PREF_CD>10</PREF_CD>
<PREF_NAME>埼玉県</PREF_NAME>
</Item>
<Item>
<PREF_CD>11</PREF_CD>
<PREF_NAME>千葉県</PREF_NAME>
</Item>
<Item>
<PREF_CD>12</PREF_CD>
<PREF_NAME>茨城県</PREF_NAME>
</Item>
<Item>
<PREF_CD>13</PREF_CD>
<PREF_NAME>栃木県</PREF_NAME>
</Item>
<Item>
<PREF_CD>14</PREF_CD>
<PREF_NAME>群馬県</PREF_NAME>
</Item>
<Item>
<PREF_CD>15</PREF_CD>
<PREF_NAME>山梨県</PREF_NAME>
</Item>
<Item>
<PREF_CD>16</PREF_CD>
<PREF_NAME>新潟県</PREF_NAME>
</Item>
<Item>
<PREF_CD>17</PREF_CD>
<PREF_NAME>長野県</PREF_NAME>
</Item>
<Item>
<PREF_CD>18</PREF_CD>
<PREF_NAME>富山県</PREF_NAME>
</Item>
<Item>
<PREF_CD>19</PREF_CD>
<PREF_NAME>石川県</PREF_NAME>
</Item>
<Item>
<PREF_CD>20</PREF_CD>
<PREF_NAME>福井県</PREF_NAME>
</Item>
<Item>
<PREF_CD>21</PREF_CD>
<PREF_NAME>愛知県</PREF_NAME>
</Item>
<Item>
<PREF_CD>22</PREF_CD>
<PREF_NAME>岐阜県</PREF_NAME>
</Item>
<Item>
<PREF_CD>23</PREF_CD>
<PREF_NAME>静岡県</PREF_NAME>
</Item>
<Item>
<PREF_CD>24</PREF_CD>
<PREF_NAME>三重県</PREF_NAME>
</Item>
<Item>
<PREF_CD>25</PREF_CD>
<PREF_NAME>大阪府</PREF_NAME>
</Item>
<Item>
<PREF_CD>26</PREF_CD>
<PREF_NAME>兵庫県</PREF_NAME>
</Item>
<Item>
<PREF_CD>27</PREF_CD>
<PREF_NAME>京都府</PREF_NAME>
</Item>
<Item>
<PREF_CD>28</PREF_CD>
<PREF_NAME>滋賀県</PREF_NAME>
</Item>
<Item>
<PREF_CD>29</PREF_CD>
<PREF_NAME>奈良県</PREF_NAME>
</Item>
<Item>
<PREF_CD>30</PREF_CD>
<PREF_NAME>和歌山県</PREF_NAME>
</Item>
<Item>
<PREF_CD>31</PREF_CD>
<PREF_NAME>鳥取県</PREF_NAME>
</Item>
<Item>
<PREF_CD>32</PREF_CD>
<PREF_NAME>島根県</PREF_NAME>
</Item>
<Item>
<PREF_CD>33</PREF_CD>
<PREF_NAME>岡山県</PREF_NAME>
</Item>
<Item>
<PREF_CD>34</PREF_CD>
<PREF_NAME>広島県</PREF_NAME>
</Item>
<Item>
<PREF_CD>35</PREF_CD>
<PREF_NAME>山口県</PREF_NAME>
</Item>
<Item>
<PREF_CD>36</PREF_CD>
<PREF_NAME>徳島県</PREF_NAME>
</Item>
<Item>
<PREF_CD>37</PREF_CD>
<PREF_NAME>香川県</PREF_NAME>
</Item>
<Item>
<PREF_CD>38</PREF_CD>
<PREF_NAME>愛媛県</PREF_NAME>
</Item>
<Item>
<PREF_CD>39</PREF_CD>
<PREF_NAME>高知県</PREF_NAME>
</Item>
<Item>
<PREF_CD>40</PREF_CD>
<PREF_NAME>福岡県</PREF_NAME>
</Item>
<Item>
<PREF_CD>41</PREF_CD>
<PREF_NAME>佐賀県</PREF_NAME>
</Item>
<Item>
<PREF_CD>42</PREF_CD>
<PREF_NAME>長崎県</PREF_NAME>
</Item>
<Item>
<PREF_CD>43</PREF_CD>
<PREF_NAME>熊本県</PREF_NAME>
</Item>
<Item>
<PREF_CD>44</PREF_CD>
<PREF_NAME>大分県</PREF_NAME>
</Item>
<Item>
<PREF_CD>45</PREF_CD>
<PREF_NAME>宮崎県</PREF_NAME>
</Item>
<Item>
<PREF_CD>46</PREF_CD>
<PREF_NAME>鹿児島県</PREF_NAME>
</Item>
<Item>
<PREF_CD>47</PREF_CD>
<PREF_NAME>沖縄県</PREF_NAME>
</Item>
</Items>
</Response>
準備が整ったらWebサーバーを起動して動作確認してみましょう。
【3】C:\phpdev にある「2K-NT-XP-phpdev_start.bat」をダブルクリックして、phpdev を起動します。
http://localhost/ が表示されればWebサーバーが起動しています。
【4】Firefox を起動して、アドレスに以下のように入力し実行します。
http://localhost/ajax/sample003/pref.html
【5】「データ取得」ボタンをクリックします。
【6】メッセージと取得したデータが表示されました。
画面が切り替わらずに、動的に表示しているところがポイントです。URLは変わっていませんよね。
また取得しているデータが、同一ドメイン(localhost)内のファイルだということにも注目してください。
【7】「クリア」ボタンをクリックします。
【8】メッセージとデータが消去されました。
余裕がある方は Firebug を起動して、ブレイクポイントを設定し、プログラムを追ってみたり、CSSのボックスを視覚化してみると理解が深まります。
【9】同様に Internet Explorer6.0 でも実行してみてください。
http://localhost/ajax/sample003/pref.html
これで同一ドメイン上のデータを取得できるようになりました。
【解説】
(1)画面への表示は innerHTML プロパティを使って動的に行ないましたが、他にDOM(ドム: Document Object Model)を使う方法もあります。
innerHTML はHTMLタグをそのまま書くことができるので、初心者が理解しやすいメリットがあります。まずは innerHTML を使う方法を理解してください。DOMを使う方法は少し難しいのでまたの機会に解説します。
(2)開発に便利な Firefox で動作確認した後、ユーザー数の多い Internet Explorer でも動作確認するようにしてください。
主な流れ
1. http://localhost/ でWebサーバーの起動を確認
↓
2. Firefox で動作確認
↓
3. Internet Explorer で動作確認