我試圖實現從API調用中檢索到的JSON數據的Javascript緩存(改編from here),以顯示儀表板小部件。我們的想法是這樣的:回調不回撥
- 裝入谷歌圖的腳本一旦加載
- ,每個儀表盤窗口小部件調用相應的API來獲取JSON數據
- 緩存從每個API調用的JSON數據,如果兩(或更多)的部件使用相同的URL,並獲取相同的數據
- 使用高速緩存JSON數據
這是據我已經得到了渲染每個插件的谷歌圖表,但我RenderWidgetN()
功能execu婷。使用Firebug時,我可以看到撥打/api/...
的URL,並返回數據,但我無法再訪問它。
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
var cache = {};
function LoadOrCacheApiData(url, callback) {
if (!cache[url]) {
cache[url] = $.get(url).promise();
}
cache[url].done(callback);
}
function DisplayData() {
LoadOrCacheApiData('/api/AverageLevel?TopN=5', 'RenderWidget0');
LoadOrCacheApiData('/api/ExpiryCountNDays?DaysAhead=7', 'RenderWidget1');
LoadOrCacheApiData('/api/LoginCount?DaysPrevious=7', 'RenderWidget2');
}
google.charts.load('current', { packages: ['corechart', 'table'] });
google.charts.setOnLoadCallback(DisplayData);
function RenderWidget0() {
var d = JSON.parse(cache['/api/AverageLevel?TopN=5']);
alert(d);
// to do: render content to div
}
function RenderWidget1() {
var d = JSON.parse(cache['/api/ExpiryCountNDays?DaysAhead=7']);
alert(d);
// to do: render content to div
}
function RenderWidget2() {
var d = JSON.parse(cache['/api/LoginCount?DaysPrevious=7']);
alert(d);
// to do: render content to div
}
</script>
我沒有用回調也不緩存之前,所以大概有萬噸的更好的方法來實現這一目標。任何建議/幫助,將不勝感激請。我很欣賞這個代碼可以被壓縮,但只是想在開始之前讓它工作。
您正在傳遞字符串作爲回調函數.. –