在前端瀏覽器中,有些數據(比如數據字典中的數據),可以在第一次請求的時候全部拿過來保存在js對象中,以后需要的時候就不用每次都去請求服務器了。對于那些大量使用數據字典來填充下拉框的頁面,這種方法可以極大地減少對服務器的訪問。這種方法特別適用于使用iframe的框架。
具體實現思路和方法:
創建一個cache.js文件:
1、前端頁面,定義那些數據需要一次性拿到前端緩存,定義一個對象來保存這些數據:
/** * 定義需要在用戶登錄的時候獲取到本地的數據字典類別 */var clsCodes = {clsCodes : [BOOL, STATUS, USER_TYPE, REPORT_STATUS ]}; /** * 獲取數據字典到本地 */var dicts;2、前端頁面,定義一個函數來調用后臺接口獲取數據,然后保存到本地緩存對象(dicts)中。
function getDicts() { $.post(getContextPath() + /api/sys/getDictList, clsCodes, function(resultBean, status, xhRequest) { if (resultBean.data != undefined) { dicts = resultBean.data; } }, 'json');}在主頁面加載的時候調用這個方法一次性獲取數據并緩存起來。這樣,以后需要同樣的數據,就直接從本地對象dicts中獲取了。
后端Controller:
3、定義一個接口,根據前端的請求,查詢數據庫(或查詢服務器緩存,如下面例子中)獲取數據返回給前端:
/** * 根據多個分類編號獲取多個字典集合 * @param clsCodes * @return {{clsCode : {code1:name1,code2:name2...}}, ...} */@SuppressWarnings({ unchecked, rawtypes })@ResponseBody@RequestMapping(getDictList)public ResultBean getDictList(@RequestParam(value = clsCodes[], required = true) String[] clsCodes) { ResultBean rb = new ResultBean(); Map<string, string="">> dictCache = (Map<string, string="">>) CacheManager.getInstance().get(CacheConstants.DICT); Map dictMap = new LinkedHashMap<>(); //使用LinkedHashMap保證順序 if(dictCache != null){ for(String clsCode: clsCodes){ dictMap.put(clsCode, dictCache.get(clsCode)); } }else{ rb.setMessage(緩存中拿不到字典信息!); rb.setSuccess(false); } rb.setData(dictMap); return rb;}</string,></string,>以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答