場景:如何重複使用JSON對象
的MVC網頁獲取JSON對象,具有大量數據。點擊按鈕(有一些按鈕安靜),我想重用這個JSON對象並選擇所需的JSON屬性(不需要向服務器發送請求)。
這不是HTML5因此無法使用瀏覽器本地存儲。此刻我將JSON對象存儲在GLOBAL變量上並重新使用它。
是否有可用的存儲和再利用返回的JSON對象客戶端的任何優雅的選擇嗎?
場景:如何重複使用JSON對象
的MVC網頁獲取JSON對象,具有大量數據。點擊按鈕(有一些按鈕安靜),我想重用這個JSON對象並選擇所需的JSON屬性(不需要向服務器發送請求)。
這不是HTML5因此無法使用瀏覽器本地存儲。此刻我將JSON對象存儲在GLOBAL變量上並重新使用它。
是否有可用的存儲和再利用返回的JSON對象客戶端的任何優雅的選擇嗎?
您可以將對象存儲在某個元素的數據 - 屬性 - 最好容器代表您的數據(表格)頁面的一部分:
var json = {};
$('#mygrid').data('mydata', json);
您可以在以後檢索
var json = $('#mygrid').data('mydata')
jQuery的數據()方法的文檔:http://api.jquery.com/data/
另一個選項Jakubs答案是創建一個全局變量,你可以更新和檢索如你喜歡的頁面。
Global variables get attached to the window object,所以只是在你<head>
部分寫這個。
<script type="text/javascript">
window.jsonData = {};
</script>
然後無論您何時檢索數據,只需更新該對象即可。
<script type="text/javascript">
$.ajax(..., function(data) {
window.jsonData = data;
});
</script>
然後,您可以在該頁面的代碼中隨時隨地使用它。
<script type="text/javascript">
console.dir(jsonData);
</script>
這種方法和全局變量有什麼區別。 –
@nilpun:這種方法是「使用全局變量」? – Bergi
只是緩存數據。沒有必要將JSON存儲在全局變量中,我相信您會在MVC應用程序中找到一個位置來限定局部變量。您將通過回調爲數據實現一個getter函數。隨着高速緩存,它會是這樣的:
var getData = (function(){
var cache;
var loading = false;
var callbacks = [];
return function(callback) {
if (typeof cache != "undefined")
callback(cache);
else {
callbacks.push(callback);
if (!loading) {
loading = true;
doSingleHeavyAjaxCall(options, function success(data) {
cache = data;
for (var cb; cb = callbacks.shift();)
cb(cache);
});
}
}
};
})();
然後用getData(function callback(data){...})
經常你想要的,它只會引發一個Ajax請求。
這種方法與全局變量相比具有適當的名稱空間,這有什麼好處 –
在我的例子'getData'中,它只有一個(某處暴露的)接口方法。每當你需要這些數據時,你做的每件事都需要做。公共緩存有什麼好處? – Bergi
你是什麼意思重用?在頁面刷新之間呢? –
假設您在頁面刷新後不需要重新使用數據,則全局變量是完全可以接受的方式。雖然使用某種名義間距方案(對於所有的代碼)是更好的:你把這些變量的「全球」的名字空間內...... – nnnnnn
@JakubKonecki,重用一個頁面上。刷新後不刷新將觸發服務器請求:-) –