データ系XHTML5(jQueryでlocalStorage)
JSONとは
ようするにデータを「keyとvalueの組」であると考える方法。仕組みはとても簡単なので、直感的に分かりやすいでしょう。
Javascriptに入っているものは「JSON=JavaScipt Object Notation(Javascriptのオブジェクトの表記法)」と言う。
javascriptが持っている機能の中でも、最もすばらしいものの一つで、最近特に注目が集まっています。
「オブジェクト」は「連想配列」とよばれることもあるが、Arrayとは全く別のものです。
しかし、配列のようにも扱える(lengthなどがあり、データの数を知ることができる)
一言で言えば「名札付きデータ」といったところか。固有名で検索するので、SQLが要らない。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8" />
<title>連想配列</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(function(){
//新しいJSONを作る
var obj={};
//キーとバリューを使って、データを入れる。
obj={
"キー":"バリュー",
"1":"はい",
"hanrin":"バカ"
};
//配列のように、書く事も出来る。JSONの仕組みがより分りやすくなるだろう。
// 添字に「文字列」を使ってある。これは「キー」。
//これはデータの検索に使う。大事な事は、「同じキーは無い」ということだ。
//もし同じキーがあれば、上書きされる。
//「バリュー」を検索するときに、この文字列が使われるため、検索がとても速い。
obj["hayashi"]="1222";
obj["yamada"]="こんばんは";
obj["usui"]="眠い";
obj["usui"]=23;
obj["umemoto"]="kagome";
//ドット表記で、キーを指定し、内容を表示
$("#disp").html("キー「hayashi」のバリュー="+obj.hayashi);
//配列のように、添字でキーを指定
$("#disp1").html("キー「usui」のバリュー="+obj["usui"]);
//キーとバリューをjQueryを使って、全て書き出す
$.each(obj,function(key,value){
$("#disp2").append("key="+key+" "+"value="+value+"<br/>");
});
//JSONの配列。配列の場合は、長さの分だけ、forでまわす。
var arr=[
{"id":"100","name":"hanrin","mark":"70"},
{"id":"101","name":"yamada","mark":"80"},
{"id":"103","name":"ueki","mark":"90"}
];
for(i=0;i<arr.length;i++){
var jobj=arr[i];
$("#disp3").append("id="+jobj.id+" "+"名前="+jobj.name+" "+"点数="+jobj.mark+"<br/>");
}
//キー付きJSONオブジェクト
var arr2={
"item1":{"id":"104","name":"般林","mark":"10"},
"item2":{"id":"105","name":"楠","mark":"100"},
"item3":{"id":"106","name":"中林","mark":"90"}
};
$.each(arr2,function(key,value){
$("#disp4").append("キーは"+key+" id="+value.id+" "+"名前="+value.name+" "+"点数="+value.mark+"<br/>");
});
});
</script>
</head>
<body>
<div id="disp"> </div>
<div id="disp1"> </div>
<hr />
JSONの全ての内容:
<div id="disp2"> </div>
<hr />
JSON配列の内容:
<div id="disp3"> </div>
<hr />
キーを持っているJSONのオブジェクト一覧:
<div id="disp4"> </div>
</body>
</html>
問題1
以下の表(クロネコの料金表)をJSONにし、内容を全部表示させなさい(上の例のように、「id=101,name=般林…」の形式で出力すること)。
また、出来る人は「サイズ」と「宛先」をフォームから入力した時に、料金が表示されるようにしなさい。
★ヒント
フォームから来た文字列を使ってそのまま検索する事はできません。いったん「文字列」として式を作ってから、eval()を使って、「javascriptの式」として実行させる必要があります。オブジェクトの構成の仕方によっては、以下の操作が不必要になるかもしれません。
$("input:button").click(function(){
var skey=$("#size").val();
var ship=$("#to").val();
var sobj=eval("arr3['"+skey+"']");
$("#shiping").html(eval("sobj."+ship));
});
public_html/tomcat/html5/json.htmlとして保存しなさい。
| サイズ | 北海道 | 関東 | 中部 | 北陸 | 関西 | 九州 |
|---|---|---|---|---|---|---|
| 60 | 1260 | 740 | 740 | 740 | 740 | 950 |
| 80 | 1470 | 950 | 950 | 950 | 950 | 1160 |
| 100 | 1680 | 1160 | 1160 | 1160 | 1160 | 1370 |
| 120 | 1890 | 1370 | 1370 | 1370 | 1370 | 1580 |
| 140 | 2100 | 1580 | 1580 | 1580 | 1580 | 1790 |
| 160 | 2310 | 1790 | 1790 | 1790 | 1790 | 2000 |
HTML5で追加された、localStorage
HTML5から、「localStorage」が追加されました。(storage=記憶装置)
これは、ブラウザにとても大きなデータを保存出来るオブジェクトです。(JSONの巨大なものです)
これを利用する事で、「データベース」の代わりに、ブラウザを利用出来ます。ただし、保存出来るデータは今の所、テキストデータに限られます。(JSONを保存するときは、いったん文字列に変換して保存し、取り出す時に再びJSONに直します)
ブラウザを閉じても、データは残っています。ブラウザを閉じた時に消えるものを「sessionStorage」と言います(使い方は同じです)。
これらを「Web Storage」と言います。Web Storageはkey value型(配列と同じ)のデータベースです。
一時的なデータの保管場所として使えます。
例 jsonlocals.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8" />
<title>ローカルストレージ練習</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(function(){
//ローカルストレージは、初期化しなくてもいきなり使えます。
//ただし、保存出来るデータは、文字列だけです。
//普通のオブジェクトのように、値をセットできるが、
//できるだけsetItem()メソッドを使うのが正しい使い方です。
localStorage.hanrin="私は値です";
localStorage.sa=2323;
localStorage.hai=[32,33,34];localStorage["hayashi"]="1222";
localStorage["yamada"]="こんばんは";
localStorage["usui"]="眠い";
localStorage["usui"]=23;
localStorage["umemoto"]="kagome";
//正しいセットの仕方。結果は上の例とおなじだけれども。
localStorage.setItem("これが正しい","値だよ〜");
//値を取り出すときも、getItem(キー)を使うのが正しいが、以下の2方法でも可。
//ドット表記で、キーを指定する方法
$("#disp").html("キー「hayashi」のバリュー="+localStorage.hayashi);
//配列のように、添字でキーを指定する方法
$("#disp1").html("キー「usui」のバリュー="+localStorage["usui"]);
//これが正しい取り出し方。id=disp1に追加表示
$("#disp1").append("<br />キー「umemoto」のバリュー="+localStorage.getItem("umemoto"));
//localStorageではメソッドを使うのが普通。key()でキーを取得、getItem(キー)で値を取る
//jqueryのeachで、全ての値を表示させてみます
$.each(localStorage,function(k,v){
var kk=localStorage.key(k);
$("#disp2").append("key="+kk+" "+"value="+localStorage.getItem(kk)+"<br/>");
});
/* ---------- 重要 ------------ */
//localStorageにJSONを入れる。この時、JSON.stringify()を使って、文字列に直さないと、
//[object object]という文字が入ってしまい、うまくいかない。
var lobjset1={"id":"400","name":"高島","mark":"70"};
localStorage.setItem("mark1",JSON.stringify(lobjset1));
var lobjset2={"id":"401","name":"牛島","mark":"30"};
localStorage.setItem("mark2",JSON.stringify(lobjset2));
//localStorageからmark2を削除
localStorage.removeItem("mark2");
//localStorageから、オブジェクトを取り出す。この時、JSON.parse()で、オブジェクトに直してやる
var lobj2=JSON.parse(localStorage.getItem("mark1"));
//id=disp1に、追加表示
$("#disp1").append("<br />localStorageから取り出したオブジェクトのnameの値="+lobj2.name);
//localStorageを使い終わったら、値を全て削除しておきます(まだ準備段階なので)。
localStorage.clear();
//formからデータを追加。一覧表示
$("#put").click(function(){
$("#disp2").empty();
var lobjset1={"id":$("#id").val(),"name":$("#name").val(),"mark":$("#mark").val()};
localStorage.setItem($("#id").val(),JSON.stringify(lobjset1));
$.each(localStorage,function(k,v){
var kk=localStorage.key(k);
var vv=JSON.parse(localStorage.getItem(kk));
$("#disp2").append("key="+kk+" "+"id="+vv.id+" name="+vv.name+" mark="+vv.mark+"<br />");
});
});
});
</script>
</head>
<body>
<form action="">
<fieldset>
<legend>登録フォーム</legend>
<label for="id">ID</label><input type="text" id="id"/><br />
<label for="name">名前</label><input type="text" id="name"/><br />
<label for="mark">得点</label><input type="text" id="mark"/><br />
<input type="button" id="put" value="登録"/>
</fieldset>
</form>
<div id="disp"> </div>
<div id="disp1"> </div>
<hr />
localStorageの全ての内容:
<div id="disp2"> </div>
</body>
</html>
問題2
以下のビデオのように、商品オブジェクトををローカルストレージに登録し、一覧表示するアプリケーションを作ってください。
削除、更新も出来るようにしておいてください。
買い物かご
jQueryを利用して、このデータベースにアクセスし、買い物かごを作ってみましょう。
*注意 localStorageは一個しか無いことに注意。前のデータが残っていると、プログラムが異常になる事があるので、そのための対策がひつようです。
(作り中)
※ 補足
暇な人は(あまりいないと思うけど)研修旅行のページを作ってください
public_html/tomcat/html5/travel.html
に保存しておいてください。jQuery mobileでもxhtml5でも良いです。旅行から帰ったら、写真なども入れてもらいますので、
写真を撮ってきてください。