2012-05-21 44 views
4

場景:如何重複使用JSON對象

的MVC網頁獲取JSON對象,具有大量數據。點擊按鈕(有一些按鈕安靜),我想重用這個JSON對象並選擇所需的JSON屬性(不需要向服務器發送請求)。

不是HTML5因此無法使用瀏覽器本地存儲。此刻我將JSON對象存儲在GLOBAL變量上並重新使用它。

是否有可用的存儲和再利用返回的JSON對象客戶端的任何優雅的選擇嗎?

+3

你是什麼意思重用?在頁面刷新之間呢? –

+0

假設您在頁面刷新後不需要重新使用數據,則全局變量是完全可以接受的方式。雖然使用某種名義間距方案(對於所有的代碼)是更好的:你把這些變量的「全球」的名字空間內...... – nnnnnn

+0

@JakubKonecki,重用一個頁面上。刷新後不刷新將觸發服務器請求:-) –

回答

1

您可以將對象存儲在某個元素的數據 - 屬性 - 最好容器代表您的數據(表格)頁面的一部分:

var json = {}; 

$('#mygrid').data('mydata', json); 

您可以在以後檢索

var json = $('#mygrid').data('mydata') 

jQuery的數據()方法的文檔:http://api.jquery.com/data/

+1

'「它不是HTML5」'...... –

+1

@Derek。所以作爲答案。閱讀文檔... – gdoron

+1

@JakubKonecki,是不是數據的HTML 5特性 –

1

另一個選項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> 
+0

這種方法和全局變量有什麼區別。 –

+0

@nilpun:這種方法是「使用全局變量」? – Bergi

3

只是緩存數據。沒有必要將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請求。

+0

這種方法與全局變量相比具有適當的名稱空間,這有什麼好處 –

+0

在我的例子'getData'中,它只有一個(某處暴露的)接口方法。每當你需要這些數據時,你做的每件事都需要做。公共緩存有什麼好處? – Bergi