javascript 非同期Ajaxでjson読込!(新元号表示対応)
w2ui gridでのjson読込、書込のつづきぽい(´・ω・`)
javascripでjson読むのAjaxでgetしなきゃなのですが
今どきのAjaxは非同期推奨!!
jQueryのDeferred使って
json読み込んだら処理!を書いてみますた。
(便利!!)
拙いコードですがm(_ _)m
var garr; //json読込用配列<グローバル変数 var deferred = new $.Deferred(); //Deferredオブジェクト作成<グローバル $(function () { getJson(); //Ajax json読込 }); //Deferredオブジェクトに通知がきたら処理 deferred.done(function(){ console.log(garr); //読み込んだ配列 }); //Ajax json読込 function getJson(){ $.ajax({ type: "GET", url: "data/data.json", //jsonファイル指定 dataType : "json", scriptCharset: 'utf-8' }).done(function(data){ garr = data; //配列にjsonを入れる。 }).fail(function(XMLHttpRequest, textStatus, errorThrown){ alert(errorThrown); }).always(function(){ deferred.resolve(); //ajax処理を終了したことをDeferredオブジェクトに通知 }); return deferred; }
おまけの、和暦出力ファンクション
読み込むjson
{"total":5,"records":[{"recid":"1","gengou":"明治","sdate":"1868\/01\/25"},{"recid":"2","gengou":"大正","sdate":"1912\/07\/30"},{"recid":"3","gengou":"昭和","sdate":"1926\/12\/25"},{"recid":"4","gengou":"平成","sdate":"1989\/01\/08"},{"recid":"5","gengou":"新元号","sdate":"2019\/05\/01"}]}
和暦出力ファンクション
function getGengou() { var weeks = new Array('日', '月', '火', '水', '木', '金', '土'); var now = new Date(); //今日 var year = now.getFullYear(); var mon = now.getMonth()+1; //month +1 var day = now.getDate(); var week = weeks[ now.getDay() ]; var hour = now.getHours(); var min = now.getMinutes(); var sec = now.getSeconds(); if(mon < 10) mon = "0" + mon; if(day < 10) day = "0" + day; if(hour < 10) hour = "0" + hour; if(min < 10) min = "0" + min; if(sec < 10) sec = "0" + sec; var tmpDate; var gstr = ''; var i = 0; var ysub = 0; var s = year + "年"; while(i < garr.records.length){ tmpDate = new Date(garr.records[i].sdate); //元号開始日 if(now.getTime() < tmpDate.getTime()){ switch(i){ case 0: gstr = garr.records[i].gengou + '以前'+ year + '年' + mon + "月" + day + "日"; break; default: if(gstr === ''){ ysub = year - (Number(garr.records[i-1].sdate.slice(0,4))-1); //元号差分 gstr = garr.records[i-1].gengou + ysub + '年' + mon + "月" + day + "日"; } break; } }else{ ysub = year - (Number(garr.records[i].sdate.slice(0,4))-1); //元号差分 if(now.getTime() >= tmpDate.getTime()) gstr = garr.records[i].gengou + ysub + '年' + mon + "月" + day + "日"; } i=(i+1)|0; } return gstr; }