5

设想:

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

不是 HTML5,所以不能使用浏览器本地存储。目前,我将 JSON 对象存储在 GLOBAL 变量上并重用它。

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

4

3 回答 3

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请求。

于 2012-05-21T02:19:03.840 回答
2

Jakubs 回答的另一个选项是创建一个全局变量,您可以在页面上随意更新和检索该变量。

全局变量附加到窗口对象,所以只需在您的<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>
于 2012-05-21T01:59:49.403 回答
1

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

var json = {};

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

您可以稍后检索它

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

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

于 2012-05-21T01:37:34.797 回答