遅延ロードで必要なデータのみ取得
大量のデータや読みこみに時間がかかるデータを画面に表示するときに
かなり時間がかかる
この場合、最低限の画面を表示し
徐々にデータを表示したり
ユーザーがWikipediaのコンテンツみたいに
アコーディオンを開いたらオンデマンドで
データを取得、表示するという遅延ロードが有効
すごい時間をかけて全部でるより
徐々に表示されるほうがストレスは少ない
jQueryMobileで、
リスト表示で
この遅延ロードをするにはコツがある
なぜなら
Javascriptで後からタグを追加しただけだとjQueryMobileのスタイルが適用されないから
なので、追加したら
listview(“refresh”)
をする必要がある
まず、実践するには
<script src="js/loadform.js"></script>
で自作スクリプトの読みこみ
次に、開閉したい場所の領域を
<div data-role="corapsible" data-corapsed="true" id="corapsible-list"> <h3>遅延ロードの実践</h3> <ul data-role="listview" id="list"> </ul> </div>
として設定
data-role=”corapsible”
は、開閉する指定
data-corapsed=”true”
で開いた状態にする
デフォルトは false で閉じた状態
http://dev.screw-axis.com/doc/jquery_mobile/components/content/collapsible/
を参考にするとわかりやすい
そして、処理はJavascript
途中で
$.mobile.showPageLoadingMsg()
と
$.mobile.hidePageLoadingMsg()
があるけど、これは
ローディングアイコンの表示、非表示をする
この動作サンプルとしては
http://www.atmarkit.co.jp/fdotnet/chushin/jqmobile_06/jqmobile_06_02.html
にTwitterのつぶやきを表示したりするサンプルがあるので
こちらを参考にするとわかりやすい
あと
data: “param1=123¶m2=homuhomu”
これは
http://semooh.jp/jquery/api/ajax/jQuery.ajax/options/
や
http://phpjavascriptroom.com/?t=ajax&p=jquery_ajax_requests
や
をみたかんじだと
サーバーip/json.php?param1=123¶m2=homuhomu
になる
$.trim()
は
http://semooh.jp/jquery/api/utilities/jQuery.trim/str/
にあるように、空白の削除するメソッド
つまり
if($.trim($(“#list”).html()) ==””){
なら
id=”list”のタグの中身が空ならとなる
$.each()は
http://semooh.jp/jquery/api/utilities/jQuery.each/object%2C+callback/
にあるように、繰り返し処理をする
繰り返すのは
$(‘#list’).append(“
“);
でリスト追加処理
$(document).on("expand","#corapsible-list",function(e,data){ if($.trim($("#list").html()) ==""){ $.mobile.showPageLoadingMsg(); $.ajax({ type:"POST", url:"./json.php", data:"param1=123¶m2=homuhomu", dataType:'json', success:function(data){ $.each(data,function(e){ $('#list').append("<li>"+data[e]+"</li>"); }); $('#list').listview("refresh"); $.mobile.hidePageLoadingMsg(); }, error: function(msg){ alert(msg.responseText); $.mobile.hidePageLoadingMsg(); } }); } });
そして、PHPファイルでデータの用意
ファイル名は json.php
<?php header('Content-type: application/json;charset=utf-8'); $data = array("みかん","りんご","ブドウ","もも"); echo json_encode($data); ?>
json_encode()
で配列をjson形式にしている