XMLHttpRequestを使ってJSONデータを利用する方法について調べました。よくあるプログラムですね。
たとえば、次のような内容のJSONファイルを用意したとします。これを http://localhost/sample_json.json で取得可能にしておきます。(配列の最後の要素に「,」をつけるとエラーになりますが、地味に面倒…)
sample_json.json
{ "list":[ { "code":1, "name":"名前1" }, { "code":2, "name":"名前2" }, { "code":3, "name":"名前3" } ] }
このJSONファイルを読み取ってHTMLの要素を使って表示するJavaScriptプログラムは次のようになります。sample_json.jsという名前で用意し、http://localhost/sample_json.html でアクセスできるようにします。
基本的にwindow.XMLHttpRequest()を使っていますが、IE対策としてActiveXObjectにも対応しています。また、JSONデータを解析するにはJSON.parse()を使っています。
function createXMLHttpRequest() { if (window.XMLHttpRequest) { return new window.XMLHttpRequest(); } else { try { return new ActiveXObject("MSXML2.XMLHTTP.6.0"); } catch (e) { try { return new ActiveXObject("MSXML2.XMLHTTP.3.0"); } catch (e) { return null; } } } } function $(id) { return document.getElementById(id); } function loadJSON(file_name) { var xhr = createXMLHttpRequest(); if (xhr) { xhr.onreadystatechange = function() { if ((xhr.readyState === 4) && (xhr.status === 200)) { $("json").innerHTML = createHtml(xhr.responseText); } }; xhr.open("GET", file_name, true); xhr.send(null); } } function createHtml(json_data) { var data = null, html = ""; try { data = JSON.parse(json_data); html = "<ol>"; for (var i = 0; i < data.list.length; i++) { var code = data.list[i].code; // コード var name = data.list[i].name; // 名前 html += "<li>" + code + ", " + name + "</li>"; } html += "</ol>"; } catch (e) { html = "parse error."; } return html; }
ここまでのJSONデータとJavaScriptを動作させるためのHTMLは次のようになります。sample_json.htmlという名前で用意し、http://localhost/sample_json.html でアクセスできるようにします。このファイルをChromeやFirefoxで表示したら、「sample_json.jsonの取得」ボタンをクリックするとデータが表示されます。最初「loadJSON(‘sample_json.json’);」としていたら動かなかったのですが、「loadJSON(‘./sample_json.json’);」と直したところ動作するようになりました。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>sample_json</title> <script type="text/javascript" src="sample_json.js"></script> </head> <body> <form> <input type="button" value="sample_json.jsonの取得" onClick="loadJSON('./sample_json.json');"><br> </form> <div id="json"></div> </body> </html>
JavaScriptについては下記が参考になります。
- JavaScriptプログラミング入門 第2版
- JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで
- JavaScriptパターン――優れたアプリケーションのための作法
- JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技