MySQLからDBIx::Classで取ってきたデータをJavascriptで取得してみよう!
<はじめに>
3層構造かつmemcachedの練習です。
1)MySQLに格納されているデータをDBIx::Classで取得します。
2)無意味に一旦memcachedに格納した後に取り出してみます。
3)XML::SimpleやらJSONやらで加工してみます。
4)1)〜3)で作ったデータをjavascriptで取得します。
<プログラムについて>
[サーバー側]
■DBIx::ClassでMySQLにアクセス!
10 #---------------------------------------------------------------------------- 11 # get Data from MySQL 12 # 13 my $schema = MyApp::Schema->connect('dbi:mysql:ASUKA','user','pass'); 14 15 $schema->storage->dbh->do("SET names utf8"); 16 17 my @all_TODOFUKEN = $schema->resultset('MDTDFKN')->all; 18 my @tempHashArray = (); 19 20 foreach $todofuken (@all_TODOFUKEN) 21 { 22 my %tempHash = ('TODOFUKEN_ID' => decode("utf8", $todofuken->TODOFUKEN_ID) , 23 'TODOFUKEN_MEI' => decode("utf8", $todofuken->TODOFUKEN_MEI) , 24 'TODOFUKEN_MEI_KANA' => decode("utf8", $todofuken->TODOFUKEN_MEI_KANA)); 25 push(@tempHashArray, \%tempHash); 26 }
■無意味にmemcachedに出し入れしてみる
28 #---------------------------------------------------------------------------- 29 # use Memcached 30 # 31 my $key = "hash"; 32 my $value = \@tempHashArray; 33 my $expires = 3600; 34 my $memcached = Cache::Memcached->new( 35 { 36 servers => ["127.0.0.1:11211"], 37 compress_threshold => 10_000 38 }); 39 40 $memcached->add($key, $value, $expires); 41 42 my $tempData = $memcached->get($key); 43 my @tempData = @$tempData;
50 #---------------------------------------------------------------------------- 51 # Make XML data 52 # 53 print "\n\nXML DATA---------------------------------------------------\n\n"; 54 55 my $xs = XML::Simple->new(); 56 57 foreach $_ (@tempData) 58 { 59 my $item = $xs->XMLout($_); 60 61 print encode("utf8", $item); 62 }
■JSON形式に加工
64 #---------------------------------------------------------------------------- 65 # Make JSON data 66 # 67 print "\n\nJSON DATA--------------------------------------------------\n\n"; 68 69 foreach $_ (@tempData) 70 { 71 my $item = encode_json($_); 72 73 print $item, "\n"; 74 }
[クライアント側]
■Javascriptでサーバー側からデータを取得
7 httpRequest = false; 8 httpRequest = new XMLHttpRequest(); 9 httpRequest.overrideMimeType('text/xml'); 10 11 function request() 12 { 13 httpRequest.abort(); 14 httpRequest.open("GET","http://hogehoge/fuga.cgi",true); 15 httpRequest.onreadystatechange = function() 16 { 17 if(httpRequest.readyState == 4) 18 { 19 if(httpRequest.status == 200) 20 { 21 window.alert("Success!!"); 22 document.getElementById('pageText').value = httpRequest.responseText; 23 } 24 } 25 } 26 httpRequest.send(null); 27 }
<まとめ>
DBIx::Class使ってみると、データ取得した後にDBのカラム名をキーに
hashを作りたくなるんだけど、べた書きだとあんまりかっこよくない。
カラム名のデータはどこからか取れないのかなー?なんて思ったり。
今回はそこまでやりませんでしたけど、javascriptでデータ取得した後に
XMLなりJSONなりをどうやって加工しようかな?なんて思ったり。
このネタでもう少し遊べそうです。