jslb_cacheajax001.js 2.55 KB
//--jslb----------------------------------------------------------------------------
// 最新情報   : http://jsgt.org/mt/01/
// 著作権表示義務無し。商用利用、改造、自由。連絡不要。

////
//Ajaxキャッシュ機構
//  一度読み込んだファイルデータを配列に入れて、再読み込みをせずに利用します。
//  Ajaxによる読み込みは、キャッシュを無視する強制ロードの設定にしてありますので
//  ブラウザによる自動キャッシュではなくプログラムから明示的に制御できます。
//
//@sample cacheAjaxOj = new cacheAjax('http://jsgt.org/ajax/newmon/tools/php/getfile.php','bodys');
//@param  url           HTTPリクエスト先
//@param  outputDivId   HTTPレスポンスの出力先DIVid名
//@requires             jslb_ajax038.js 簡易Ajaxライブラリhttp://jsgt.org/mt/archives/01/000409.html
//@requires             jslb_progressbar001.js プログレスバーライブラリ
//@see                  http://jsgt.org/ajax/
//
function cacheAjax(url,outputDivId){

  //
  //@sample cacheAjaxOj.getFile('chapter03.htm',callback)
  //@parem fileName ファイル名
  //@parem callback 着信時コールバック関数名
  this.getFile     = getFileSwt;

  this.cachenabled = true ;

  var pbarAry  = [];  //プログレスバー用配列
  var pageAry  = [];  //ページデータ用配列

  //目次プレロード
  function preload(fileName,callback){

    //プログレスバーインスタンス生成
    pbarAry[fileName] = new jsgt_progressBar();
    //プログレスバー開始
    pbarAry[fileName].progress.prog_start();
    
    //リクエスト発行
    sendRequest(onloaded_pre,'&file='+fileName,'POST',url,true,true);
    //コールバック処理
    function onloaded_pre(oj){ 
      //受信
      pageAry[fileName] = decodeURIComponent(oj.responseText) ;
      //出力
      writePage(pageAry[fileName],callback);
      //プログレスバー停止
      pbarAry[fileName].progress.prog_stop();
    }

  }

  //ファイル取得スイッチ
  //
  function getFileSwt(fileName,callback){
    //ロード済みまたは、this.cachenabled==trueでなければロード
    if(!pageAry[fileName]||!this.cachenabled)preload(fileName,callback);
    else                  writePage(pageAry[fileName],callback);
  }
  
  //ページデータ出力
  function writePage(pagedata,callback){
    if(!pagedata || !document.getElementById(outputDivId))return;
    document.getElementById(outputDivId).innerHTML='<pre>'+pagedata+'</pre>' ;
    if(callback)callback();
  }

}