如何重用JSON对象

时间:2012-05-21 01:31:48

标签: javascript jquery json

情境:

MVC网页获取包含大量数据的JSON对象。点击按钮(有许多按钮安静)我想重用这个JSON对象并选择所需的JSON属性(不向服务器发出请求)。

不是HTML5 因此无法使用浏览器本地存储。目前我正在将JSON对象存储在GLOBAL变量上并重新使用它。

是否有任何优雅的选项可用于存储和重用客户端返回的JSON对象?

3 个答案:

答案 0 :(得分: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请求。

答案 1 :(得分:2)

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>

答案 2 :(得分:1)

您可以将对象存储在某个元素的data-属性中 - 最好是用于代表您的数据的页面部分的容器(表格,网格):

var json = {};

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

您可以稍后检索

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

jQuery data()方法文档:http://api.jquery.com/data/