2012-05-21 48 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